var IDList = 200条数据的IDdelete from Table ID In('IDList ')不知道可行否
解决方案 »
- .net web用户控件 超简单的问题
- 如何从dataset中随机抽取几条数据
- 请教一下造成aspx页面打开缓慢的原因都有哪些?
- 讨论下.net下怎么做才算是面向对象思想开发数据库
- C里面有宏,C#里有没有类似的东西
- DataGridViewLinkColumn 的Text属性更改问题
- 求进度条动化图标,网络联通时候类似于XP网络状态动化的图标,最好是gif格式的
- 小妹在这时请各位哥哥姐姐们讲解一下关于class的问题?
- 如果点击radiolist控件某一选项后,弹出一个js的confirm窗口,如果ok就执行相关动作,cancel就不做任何处理。
- 简单的问题
- C#中读取xml文件时遇到的问题。
- Windows与C#问题
{
for(i=0,i<TableB.count,i++)
{
if(TabelA.Cell[i][ID]==TabelB.Cell[i][ID])
{delete from Table ID In('IDList ');Break;}
}
}上面提供一个思路
每删除一条记录就跳出循环重新遍历以减少搜索量
写法可能有问题手头没有VS不方便你自己可以看着改改
如果来自数据库就简单了
A.关键字段是否==B.关键字段,== 则删除,否则,继续。
这样,可能会省一点时间。这样循环的话,可能最多也就循环1000次,最好就是在判断一下,B中还有没有数据。这样遇到特殊情况,也会省点时间。
然后循环B表,内循环循环是循环A表,for(;i<A.Rows.Count;i++)
注意的是只有第一次i=0; 之后逐渐变大,
例如B第一条在A中200条发现,那么B第二条肯定在A200条之后,这样搜索一
共必定是1000次。 而DataTable的排序用sort就可以。很现成的用法。
复杂度: 0(1000).
_Table1.Columns.Add("A"); DataTable _Table2 = new DataTable("A2");
_Table2.Columns.Add("B"); for (int i = 0; i != 1000; i++)
{
if (i <= 200) _Table2.Rows.Add(new object[] { i });
_Table1.Rows.Add(new object[] { i });
} _Table2.PrimaryKey = new DataColumn[] { _Table2.Columns[0] };
_Table1.PrimaryKey = new DataColumn[] { _Table1.Columns[0] };
DataSet _Set = new DataSet();
_Set.Tables.Add(_Table1);
_Set.Tables.Add(_Table2);
_Table1.ChildRelations.Add("Li", _Table1.Columns[0], _Table2.Columns[0]);
DataTable _NewTable = new DataTable();
for (int i = 0; i != _Table1.Rows.Count; i++)
{
if (_Table1.Rows[i].GetChildRows("Li").Length == 0)
{
_NewTable.ImportRow(_Table1.Rows[i]);
}
}
那么 DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable(); var dt3 = from r in dt1.AsEnumerable()
where !(
from rr in dt2.AsEnumerable()
select rr.Field<int>("Id")
).Contains(r.Field<int>("Id"))
select r;现在dt3里面就是 dt1,dt2的非交集了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;namespace Utility
{
public class DTHelper
{
/// <summary>
/// 取两个DataTable的交集,删除重复数据
/// </summary>
/// <param name="sourceDataTable">源DataTable</param>
/// <param name="targetDataTable">目标DataTable</param>
/// <param name="primaryKey">两个表的主键</param>
/// <returns>合并后的表</returns>
public static DataTable Merge(DataTable sourceDataTable, DataTable targetDataTable, string primaryKey)
{
if (sourceDataTable != null || targetDataTable != null || !sourceDataTable.Equals(targetDataTable))
{
sourceDataTable.PrimaryKey = new DataColumn[] { sourceDataTable.Columns[primaryKey] };
DataTable dt = targetDataTable.Copy();
foreach (DataRow tRow in dt.Rows)
{
//拒绝自上次调用 System.Data.DataRow.AcceptChanges() 以来对该行进行的所有更改。
//因为行状态为DataRowState.Deleted时无法访问ItemArray的值
tRow.RejectChanges();
//在加载数据时关闭通知、索引维护和约束。
sourceDataTable.BeginLoadData();
//查找和更新特定行。如果找不到任何匹配行,则使用给定值创建新行。
DataRow temp = sourceDataTable.LoadDataRow(tRow.ItemArray, true);
sourceDataTable.EndLoadData();
sourceDataTable.Rows.Remove(temp);
}
}
sourceDataTable.AcceptChanges();
return sourceDataTable;
}
}
}也可以使用DataTable.Select()查找相同行,不过经测试速度略慢于上述方法.
不同的就用 游标判断