2010-08-08 81 views
0

我有一个数据表,它有一个单一的文本列“标题”,它可以有多个重复的值。我可以使用数据视图删除重复项。从数据表中获取每个不同值的重复计数

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

但是我怎样才能得到没有任何循环的每个不同值的重复次数?

回答

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)"); 
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中。

+1

我不幸地使用Linq。 – NLV 2010-08-08 14:54:13

+0

你可以用'tempTable.AsEnumerable()'替换'tempTable.Rows.Cast ()' – 2010-08-09 11:58:35