从数据表中获取每个不同值的重复项

时间:2010-08-08 10:42:10

标签: c# .net ado.net duplicates dataview

我有一个数据表,它有一个单独的文本列'Title',它可以有多个重复值。我可以使用dataview删除重复项。

DataView v = new DataView(tempTable);
tempTable = v.ToTable(true, "Title");

但是如何在没有任何循环的情况下获得每个不同值的重复数量?

2 个答案:

答案 0 :(得分:1)

如果您不想循环或使用Linq,那么无法做到这一点,但您可以使用数据表上的计算列以及另一个条件(如果适用)。那就是数据应该在两个相关的表格中。

DataRelation rel = new DataRelation("CustToOrders", data.Tables["Customers"].Columns["customerid"],    data.Tables["Orders"].Columns["customerid"]);
data.Relations.Add(rel);

将customerid字段作为Orders表中的外键,因此它具有重复项。 您可以通过这种方式获得重复项的计数:

data.Tables["Customers"].Columns.Add("Duplicates",
   GetType(Decimal), "Count(child.customerid)");

答案 1 :(得分:0)

我得到你想要的结果的方式看起来像这样:

tempTable.Rows.Cast<DataRow>()
    .Select(dr => Convert.ToString(dr[0]))
    .GroupBy(dr => dr)
    .Select(g => new { Title = g.Key, Count = g.Count() });

然而,它实际上是在引擎盖下循环。事实上,在没有检查每条记录的情况下,我无法想出一种方法来进行这种分组。

缺点是该表达式的结果是一系列匿名类型实例。如果您仍然希望结果是DataView,则可以重写最后一个Select以创建具有两列的新DataRow,并将它们推送到您传递给DataView的新DataTable中。