【发布时间】:2018-12-27 19:51:42
【问题描述】:
我想使用以下方法按数据表分组。但是我不能选择包含字符串的列。
dtTAConvert 示例;
SAMPLE_TIME WAIT_CLASS
23:11:12 CPU
23:11:12 IO
23:11:12 IO
23:11:11 CPU
23:11:11 CPU
我想要的是这个;
SAMPLE_TIME WAIT_CLASS COUNT
23:11:12 CPU 1
23:11:12 IO 2
23:11:11 CPU 2
到目前为止,我写了下面的代码;
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),
});
抛出异常
'IGrouping' 不包含'Field' 的定义,并且最佳扩展方法重载'DataRowExtensions.Field(DataRow, string)' 需要'DataRow' 类型的接收器
如果我将上面的代码更改为如下所示,它可以工作;
WAIT_CLASS = g.First().Field<string>("WAIT_CLASS"),
但是这仅返回第一个元素,这对我不起作用。
如何像我解释的那样选择字符串列?
【问题讨论】:
-
在您的预期输出中,您似乎希望同时按
SAMPLE_TIME和WAIT_CLASS进行分组,但您没有在查询中执行此操作。有什么理由吗? -
@Aomine 好吧,我不知道。我真的不擅长linQ。如何将两者分组?
标签: c# .net linq datatable datarow