在c#中过滤DataTable

时间:2013-07-05 20:13:46

标签: c#

我有一个数据表:

    ID | ID2
    --------
    1  |  2
    1  |  3
    12 |  2 
    15 |  3

我需要使用ID2过滤数据表(在这种情况下我知道两个ID2值2和3),这样我就可以输出

    ID | ID2
    --------
    1  |  2
    1  |  3

这意味着应该选择具有两个ID2(2和3)的ID。

dt.Select(“ID2 = 2 AND ID2 = 3”);在这种情况下不起作用。

由于

2 个答案:

答案 0 :(得分:3)

目前尚不清楚你在寻找什么 如果要提取ID列的相同值出现两次或更多次的所有行,则

DataRow [] rows = dt.Select(“Count(ID)> 1)”)

你是对的,这对没有关系的数据表不起作用 我找到了一个解决方案,使用Linq,

// Returns an IGrouping<int,DataRow> for every ID that appears more than one time
var result = dt.AsEnumerable().GroupBy(z => z.Field<int>("ID"))
             .Select(q=> new{Count = q.Count(), ID=q.Key})
             .Where(x => x.Count > 1);

// Now we could extract the rows in the usual way
foreach(var l in result)
{
    DataRow[] r = dt.Select("ID=" + l.ID);
    r.Dump();
}

我不知道这有多高效,但至少这似乎有效

答案 1 :(得分:0)

您可以使用LINQ to DataSet

var rows = table.AsEnumerable().Where(r => r.Field<int>("ID") == 1);             

根据所需结果BTW,您应按ID过滤。