c# - C#:使用 Field 方法按数据表中的多列进行 LINQ 查询分组
问题描述
我正在尝试按年份和单位获取 t & kg 分组的总和。使用 Field 方法在 Linq 中完成它时遇到问题。然而。我可以在不使用 Field 方法的情况下做到这一点。
数据表中的数据格式如下。
Unit Quantity Year
"t" "10" 2019
"t" "05" 2018
"kg" "05" 2018
"t" "02" 2019
"kg" "14" 2018
"kg" "28" 2019
结果应该是这样的;
结果
Total 2018 in kg - 19
Total 2018 in t - 05
Total 2019 in kg - 28
Total 2019 in t - 12
这就是我现在拥有的所有内容,正如我在 group by 语句中提到的那样,它按所有 3 列进行分组。但是,如果我不这样做,我将无法在 select 语句中访问该列。
代码片段
注意:我没有模型属性结构。
DataTable Dt = dsData.Tables["Data2019"];
var data = from mfRecords in Dt.AsEnumerable()
group mfRecords by new
{
DataUnit = mfRecords.Field<string>("Unit").ToString(),
Quantity = Convert.ToDouble(mfRecords.Field<string>("Qty")),
RecordYear = Convert.ToDateTime(mfRecords.Field<string>("SalesDate")).Year,
} into g
select new
{
SalesYear = g.Key.RecordYear,
SalesUnit = g.Key.DataUnit,
TotalQty = g.Sum(k => g.Key.Quantity)
};
这是通过使用 LINQ 完成的
var data = lst.Select(k => new { k.SalesDate.Year, k.Qty, k.Unit })
.GroupBy(x => new { x.Year,x.Unit }, (key, group) => new
{
SalesYear = key.Year,
SalesUnit = key.Unit,
TotalQty = string.Format("{0:0.00}",group.Sum(k => k.Qty))
})
.ToList();
有谁知道我如何使用 LINQ 使用 Field 方法进行分组?
解决方案
改为这样:
var data = from mfRecords in Dt.AsEnumerable()
group mfRecords by new
{
DataUnit = mfRecords.Field<string>("Unit").ToString(),
RecordYear = mfRecords.Field<string>("SalesDate")
} into g
select new
{
SalesYear = g.Key.RecordYear,
SalesUnit = g.Key.DataUnit,
TotalQty = g.Sum(k => int.Parse((string)k["Qty"]))
};
说明:您不需要按数量分组,因为那是您要求和的内容。
推荐阅读
- android - 用expo构建屏幕录像机
- collections - filter 必须是 dict、bson.son.SON 的实例
- keystonejs - 我无法使用 keystone.js 框架运行 node.js 服务器
- google-cloud-platform - 如何比较 200Mhz 云函数和 2 vCPU 计算引擎实例?
- python - Anaconda 卸载/安装问题 (MacOS)
- python - adb 输入水龙头很慢
- sql - Oracle 中获取字符串并插入的过程
- android - 使用 frida 绕过 Flutter 应用的 Sslpinning 中的空地址
- github - 身份验证已删除。请改用个人访问令牌
- c++ - 克隆带有散列的随机指针的链表