如何通过LINQ从DataTable中选择子集?

时间:2011-02-16 15:39:11

标签: c# linq select datatable subset

我是LINQ的新手。 我有以下DataTable

Name   Date       price1  price2
string DateTime   decimal decimal
Jan09  14.01.2009 10.0    12.0
Feb09  14.01.2009 11.0    13.0
Jan09  15.01.2009 10.0    12.5
Feb09  15.01.2009  9.0    10.0
Jan09  18.01.2009 10.0    12.5
Feb09  18.01.2009  9.0    10.0

名称和日期是主要复合键。

我想为每个日期选择所有名称,然后遍历新集合并选择下一个日期。

var subCollection =  tab.Rows.Cast<DataRow>().Select(r1 => r1["Date"]).Select<string>(r2 => r2["Name"])
foreach (DataRow row in subCollection)
{
    // do something with row
}

My Linq表达错误

1 个答案:

答案 0 :(得分:3)

我认为您想要的是按日期分组,然后查看给定日期的所有名称,然后查看下一个名称。

如果是这种情况,您希望使用Linq组语法...

var query = from row in table.AsEnumerable()
        group row by row["Date"] into g
        select g;

你可以在网上找到很多使用Linq组语法做各种事情的例子。我发现重要的是意识到你可以按多列进行分组,并仍然使用以下语法应用Sum,Max或Count等聚合函数:

var query = from row in table.AsEnumerable()
    group row by new { Date = row["Date"], Price1 = row["Price1"] }  into g
    select new
    {
        Date = g.Key.Date,
        Price = g.Key.Price1,
        Count = g.Count()
    };