我有3列在一个DataTable
ID名称计数
1个詹姆斯4345
2克里斯汀89231
3詹姆斯599
4 Suneel 317113
我需要行1和3走了,只有新的DataTable返回行2和4。我找到了一个真正的好相关的问题在SO--建议这个家伙 。 但他的解决方案采用哈希表,只有消除了排3,而不是两个1和3的帮助!
我有3列在一个DataTable
ID名称计数
1个詹姆斯4345
2克里斯汀89231
3詹姆斯599
4 Suneel 317113
我需要行1和3走了,只有新的DataTable返回行2和4。我找到了一个真正的好相关的问题在SO--建议这个家伙 。 但他的解决方案采用哈希表,只有消除了排3,而不是两个1和3的帮助!
我想这从数据表删除重复 ..
using System.Data;
using System.Linq;
...
//assuming 'ds' is your DataSet
//and that ds has only one DataTable, therefore that table's index is '0'
DataTable dt = ds.Tables[0];
DataView dv = new DataView(dt);
string cols = string.Empty;
foreach (DataColumn col in dt.Columns)
{
if (!string.IsNullOrEmpty(cols)) cols += ",";
cols += col.ColumnName;
}
dt = dv.ToTable(true, cols.Split(','));
ds.Tables.RemoveAt(0);
ds.Tables.Add(dt);
下面的一行代码将避免重复行。
ds.Tables["Employee"].DefaultView.ToTable(true,"Name");
DS - Dataset对象
dt.DefaultView.ToTable( true, "Name");
DT - DataTable对象
怎么样这样的事情;
伪代码:假设对象有3个属性:ID,NAME,值]和称为NameObjects和是IEnumerable的(列表NameObjects)
var _newNameObjectList = new List<NameObject>();
foreach(var nameObject in NameObjecs)
{
if(_newNameObjectList.Select(x => x.Name == nameObject.Name).ToList().Count > 0)
{
_newNameObjectList.RemoveAll(x => x.Name == nameObject.Name);
continue;
}
else
{
_newNameObjectList.Add(nameObject);
}
}
这应该工作。 它使用了命名空间System.Linq的;
好了,所以我看了看博客中指出,以我的Pandiya。 在评论部分,一个叫凯文·莫里斯第一章发布了使用C#字典,它为我工作的解决方案。
在我的主块,我写道:
string keyColumn = "Website";
RemoveDuplicates(table1, keyColumn);
而我RemoveDuplicates功能被定义为:
private void RemoveDuplicates(DataTable table1, string keyColumn)
{
Dictionary<string, string> uniquenessDict = new Dictionary<string, string>(table1.Rows.Count);
StringBuilder sb = null;
int rowIndex = 0;
DataRow row;
DataRowCollection rows = table1.Rows;
while (rowIndex < rows.Count - 1)
{
row = rows[rowIndex];
sb = new StringBuilder();
sb.Append(((string)row[keyColumn]));
if (uniquenessDict.ContainsKey(sb.ToString()))
{
rows.Remove(row);
if (RemoveAllDupes)
{
row = rows[rowIndex - 1];
rows.Remove(row);
}
}
else
{
uniquenessDict.Add(sb.ToString(), string.Empty);
rowIndex++;
}
}
}
如果你去的博客 ,你会发现一个更通用的功能,允许在多个列嗅探受骗者。 我添加了一个标志 - RemoveAllDupes - 的情况下,我想删除所有重复行,但仍假定行按名称排序,并只涉及重复,而不是一式三份,一式四份等。 如果任何人都可以,请更新此代码,以反映去除这样的。