c#linq使用其他列值查询聚合数据
本文关键字:查询 数据 其他 c#linq | 更新日期: 2024-10-18 15:06:13
这是我的环境。
我有一个具有这种结构的数据表
IDstring|Attrib1|Attrib2|Attrib3|Attrib4|值
我需要按attrib元素导出平均值、最大值、最小值组,我使用以下代码:
var queryTable = from rows in dataTable.AsEnumerable()
group rows by new
{
Attrib1 = rows["Attrib1"],
Attrib2 = rows["Attrib2"],
Attrib3 = rows["Attrib3"],
Attrib4 = rows["Attrib4"]
} into grp
select new
{
Attrib1 = grp.Key.Attrib1,
Attrib2 = grp.Key.Attrib2,
Attrib3 = grp.Key.Attrib4,
Attrib4 = grp.Key.Attrib14,
Avg = grp.Average(s => Convert.ToDouble(s["Value"])),
Min = grp.Min(s => Convert.ToDouble(s["Value"])),
Max = grp.Max(s => Convert.ToDouble(s["Value"])),
Count = grp.Count()
};
如果我还需要导出一个匹配最大值和最小值的IDstring(不必全部出现),我该怎么做
我已经尝试过对原始数据表的onquerytable结果的每个max和min元素使用另一个linq查询,但对于我所拥有的元素数量来说太慢了。你能帮我吗?
在代码编码器的大力帮助下,这可能是解决方案:首先,我按Value排序,然后取第一个和最后一个元素。
var queryTable = from rows in resultTable.AsEnumerable()
orderby rows.Field<double>("Value")
group rows by new
{
Attrib1 = rows["Attrib1"],
Attrib2 = rows["Attrib2"],
Attrib3 = rows["Attrib3"],
Attrib4 = rows["Attrib4"]
} into grp
select new
{
Attrib1 = grp.Key.Attrib1,
Attrib2 = grp.Key.Attrib2,
Attrib3 = grp.Key.Attrib3,
Attrib4 = grp.Key.Attrib4,
Avg = grp.Average(s => Convert.ToDouble(s["Value"])),
Min = grp.Min(s => Convert.ToDouble(s["Value"])),
IDStringMin = grp.First().Field<string>("IDstring"),
Max = grp.Max(s => Convert.ToDouble(s["Value"])),
IDStringMax = grp.Last().Field<string>("IDstring"),
Count = grp.Count()
};