C# 使用LINQ的GroupBy列
我想使用下面的方法按datatable分组。但是,我无法选择包含字符串的列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
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
分组。您没有指定在这种情况下应该发生什么。