Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQ从DataTable中获取字段的分组数组_C#_Linq_Datarow - Fatal编程技术网

C# 如何使用LINQ从DataTable中获取字段的分组数组

C# 如何使用LINQ从DataTable中获取字段的分组数组,c#,linq,datarow,C#,Linq,Datarow,我有一个DataTable var tbl = new DataTable(); tbl.Columns.Add("key",typeof(int)); tbl.Columns.Add("value",typeof(int)); tbl.Rows.Add(1, 2); tbl.Rows.Add(1, 4); tbl.Rows.Add(3, 6); tbl.Rows.Add(3, 8); tbl.Rows.Add(3, 10); 从这个表中,我只想要值按键进行分组 {{2,4},{6,8,10}

我有一个
DataTable

var tbl = new DataTable();
tbl.Columns.Add("key",typeof(int));
tbl.Columns.Add("value",typeof(int));
tbl.Rows.Add(1, 2);
tbl.Rows.Add(1, 4);
tbl.Rows.Add(3, 6);
tbl.Rows.Add(3, 8);
tbl.Rows.Add(3, 10);
从这个表中,我只想要
键进行分组

{{2,4},{6,8,10}} 
更准确地说,
IEnumerable

var tbl = new DataTable();
tbl.Columns.Add("key",typeof(int));
tbl.Columns.Add("value",typeof(int));
tbl.Rows.Add(1, 2);
tbl.Rows.Add(1, 4);
tbl.Rows.Add(3, 6);
tbl.Rows.Add(3, 8);
tbl.Rows.Add(3, 10);
我设计了一个查询

var res = from row in tbl.AsEnumerable() 
           group row by row.Field<int>("key") 
           into nGroup  select nGroup;
var res=来自tbl.AsEnumerable()中的行
按行分组。字段(“键”)
进入nGroup选择nGroup;
这为我提供了与
键组合的
数据行
组,即
IEnumerable


如何仅选择
值?

对于每个
n组
,您需要选择
s:

var res = from row in tbl.AsEnumerable()
          group row by row.Field<int>("key") into nGroup
          select (
              from n in nGroup
              select n.Field<int>("value")
          );
var res=来自tbl.AsEnumerable()中的行
按行分组。字段(“键”)放入nGroup
挑选(
从n到n组
选择n.字段(“值”)
);

尝试以下操作:var results=tbl.AsEnumerable().GroupBy(x=>x.Field(“key”)).Select(x=>newkeyvaluepair(x.First().Field(“value”)、x.Last().Field(“value”)).ToList()@jdweng:部分有效。据我所知,它只需要每个组的第一个和最后一个元素。但是组可以有无限数量的元素(参见更新的答案)。然后使用以下命令:var results=tbl.AsEnumerable().GroupBy(x=>x.Field(“key”)。Select(x=>x.Select(y=>y.Field(“value”)。ToList()).ToList()@是的,这很有效。请您回答一下(最好使用LINQ语法)。我会接受的。