C#linq中的where子句指向datatable

时间:2014-05-24 10:21:12

标签: c# linq

我在数据表中有两列Col1col2,如下所示:

enter image description here

请注意:

col1仅包含我们或英国,没有其他值

现在我的要求是根据我们和英国来分离价值。

如下所示,分别获取与我们和英国相对应的所有值。

早些时候我用linq代码完成了这个。那时我的要求很简单,

只需获取col2中的所有记录:

string[] data = dt.AsEnumerable()
  .Select(s => s.Field<string>("col2"))
  .ToArray<string>();

现在在新要求中,我需要根据我们和英国单独使用它们。

2 个答案:

答案 0 :(得分:2)

如果您需要根据某列的值分隔商品,请使用GroupBy,如下所示:

var groups = dt.AsEnumerable().GroupBy(s => s.Field<string>("col1"));

拥有群组后,您可以对其进行迭代,或者在Dictionary<string,string[]>中“实现”它们,如下所示:

var byCol1 = groups.ToDictionary(g => g.Key, g => g.Select(s => s.Field<string>("col2")).ToArray());

您可以输出每个键的数字,如下所示:

foreach (var p in byCol1) {
    Console.WriteLine("{0} : {1}", p.Key, string.Join(", ", p.Value));
}

或获取特定键的数字,如下所示:

string[] items = byCol1["us"];

答案 1 :(得分:0)

要获取col1等于&#34; us&#34;的所有col2值的列表,您可以使用以下代码:

string[] data = dt.AsEnumerable().Where(s => s.Field("col1") == "us").Select(s => s.Field("col2")).ToArray();