我试图按年和单位来获得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方法进行分组吗?
答案 0 :(得分:1)
改为这样:
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"]))
};
说明:您不需要按数量分组,因为这是您想要求和的结果。