我是C#的新手,这是我的问题
我的预期结果是删除ABC的整个行。 两行(具有重复的ABC)将被删除。
我需要以迭代方式进行操作。不能使用其他帖子所推荐的与众不同的东西。
我试图删除重复项,但是没有用。
因此,我决定将非重复项添加到新集合中。
但是它也不起作用。
CollectionIn->我的样本集合
| Folder| Times
------------------------
| ABC | 3 |
| CDE | 2 |
| ACD | 2 |
| ABC | 1 |
CollectionOut = new DataTable();
CollectionOut.Columns.Add("Folder");
CollectionOut.Columns.Add("Times");
bool duplicate = false;
for (int i = 0; i < CollectionIn.Rows.Count; i++)
{
string value1 = CollectionIn.Rows[i].ItemArray[0].ToString().ToLower();
for (int z = 0; z < i; z++)
{
string value2 = CollectionIn.Rows[z].ItemArray[0].ToString().ToLower();
if (value1 == value2)
{
duplicate = true;
break;
}
}
if (!duplicate)
{
CollectionOut.Rows.Add(value1);
}
}
谁能帮忙看看。谢谢!
答案 0 :(得分:6)
由于您不想使用Distinct,因此无法使用LINQ
来做到这一点,例如:
var newList = myList.GroupBy(s=>s).Where(s => s.Count() == 1).ToList();
答案 1 :(得分:1)
我会使用Linq-To-DataTable
:
List<DataRow> duplicates = CollectionIn.AsEnumerable()
.GroupBy(r => r.Field<string>("Folder"))
.Where(g => g.Count() > 1)
.SelectMany(grp => grp)
.ToList();
duplicates.ForEach(CollectionIn.Rows.Remove);
这将从原始集合(DataTable)中删除重复项,而不创建新的副本。