Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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的GroupBy列_C#_.net_Linq - Fatal编程技术网

C# 使用LINQ的GroupBy列

C# 使用LINQ的GroupBy列,c#,.net,linq,C#,.net,Linq,我想使用下面的方法按datatable分组。但是,我无法选择包含字符串的列 var dtTAConvertList = (from dr1 in dtTAConvert.AsEnumerable() group dr1 by dr1.Field<DateTime>("SAMPLE_TIME") into g select new { SAMPLE_TIME = g.Key, WAIT_CLASS = g.Fie

我想使用下面的方法按datatable分组。但是,我无法选择包含字符串的列

var dtTAConvertList =
    (from dr1 in dtTAConvert.AsEnumerable()
     group dr1 by dr1.Field<DateTime>("SAMPLE_TIME") into g
     select new
     {
         SAMPLE_TIME = g.Key,
         WAIT_CLASS = g.Field<string>("WAIT_CLASS"),          // ==> I get error in this line
         COUNT = Math.Round(g.Sum(h => h.Field<double>("COUNT")) / 15.0, 2),
     });
var dtTAConvertList=
(来自dtTAConvert.AsEnumerable()中的dr1)
按dr1.字段(“采样时间”)将dr1分组为g
选择新的
{
样本时间=g.键,
WAIT_CLASS=g.Field(“WAIT_CLASS”),//=>我在这行中得到错误
COUNT=数学四舍五入(g.Sum(h=>h.Field(“COUNT”))/15.0,2),
});
它抛出异常

“iGroup”不包含“Field”的定义,而最佳扩展方法重载“DataRowExtensions.Field(DataRow,string)”需要“DataRow”类型的接收器


如何选择已存在于该数据表中的字符串列?

由于每个组都有许多次出现的
字段(“WAIT_CLASS”)
,因此您必须以与计数大致相同的方式进行,只是您可能希望检索第一次出现的字段:

var dtTAConvertList =
    (from dr1 in dtTAConvert.AsEnumerable()
     group dr1 by dr1.Field<DateTime>("SAMPLE_TIME") into g
     select new {
         SAMPLE_TIME = g.Key,
         WAIT_CLASS = g.First().Field<string>("WAIT_CLASS"),
         COUNT = Math.Round(g.Sum(h => h.Field<double>("COUNT")) / 15.0, 2),
     });
var dtTAConvertList=
(来自dtTAConvert.AsEnumerable()中的dr1)
按dr1.字段(“采样时间”)将dr1分组为g
选择新的{
样本时间=g.键,
WAIT_CLASS=g.First()字段(“WAIT_CLASS”),
COUNT=数学四舍五入(g.Sum(h=>h.Field(“COUNT”))/15.0,2),
});

请在您的问题中包含错误消息好吗?@OlivierJacot Descombes编辑的问题。使用
g
代替
dr1
@MaciejS。已编辑的问题。“g”是集合/范围变量。是否要使用“First()”?使用“First()”的问题是,仅获取第一个元素。这是完全错误的。我只想使用采样时间按字符串列分组。如果您按
sample\u time
分组,并且有多个具有相同采样时间的记录,则此组将包含此
sample\u time
作为键以及属于此键的记录的枚举。也就是说,您将有多个
WAIT\u CLASS
条目可供每个样本时间选择。您可以选择Max、Min、First、Sum等。另一个选项是按
SAMPLE\u TIME
WAIT\u CLASS
分组。您没有指定在这种情况下应该发生什么。