C# 我应该如何在使用linq的模型列表的不同值上使用GROUPBY和sum
我有一份期末考,是我的模范班的名单C# 我应该如何在使用linq的模型列表的不同值上使用GROUPBY和sum,c#,linq,group-by,sum,C#,Linq,Group By,Sum,我有一份期末考,是我的模范班的名单 List<ItemsConsumed> FinalCons = new List<ItemsConsumed>(); 我也试图从中得到所需的结果,但这也没有给我正确的结果 var itemCon = FinalCons.GroupBy(ic => new { ic.PersonalID}).Select(ic => new ItemsConsumed { Personal
List<ItemsConsumed> FinalCons = new List<ItemsConsumed>();
我也试图从中得到所需的结果,但这也没有给我正确的结果
var itemCon = FinalCons.GroupBy(ic => new { ic.PersonalID}).Select(ic => new ItemsConsumed
{
PersonalID=ic.Key.PersonalID,
ItemID = ic.FirstOrDefault().ItemID,
Consumption=ic.Sum(c=>c.Qty)
}).ToList();
根据PersonalID
和ItemID
对您的项目进行分组
<Personal ID, Item ID, Consumption>
<1 , 4 , 1> <1 , 4 , 2>
<1 , 4 , 1> <1 , 5 , 1>
<1 , 5 , 1> <2 , 4 , 1>
<2 , 4 , 1> <2 , 5 , 2>
<2 , 5 , 2>
和
应该是正确的。除了您的,我看不出第一个代码有问题。Select()
s应该有一个FirstOrDefault()
当我将第一个ItemComSummed的内容添加到列表中时,它向我显示了一个错误“无法隐式地将类型'System.Collections.Generic.IEnumerable'转换为'int'。因此,我使用FirstOrDefault()为itemCon编写代码。但没有给出正确的结果。它只为每个ID提供两行。但我还需要它按itemID进行筛选。现在不知道如何为此编写linq查询。
<Personal ID, Item ID, Consumption>
<1 , 4 , 1> <1 , 4 , 2>
<1 , 4 , 1> <1 , 5 , 1>
<1 , 5 , 1> <2 , 4 , 1>
<2 , 4 , 1> <2 , 5 , 2>
<2 , 5 , 2>
var itemConsumed = FinalCons
.GroupBy(x => new {
x.PersonalID,
x.ItemID
}) //group by both PersonalID and ItemID
.Select(x => new
{
PersonalID= x.Key.PersonalID,
ItemID = x.Key.ItemID,
Consumption = x.Sum(a => a.Consumption)
})
.OrderBy(x => x.PersonalID).ThenBy(y=>y.ItemID);
//order by Personal ID and then by Item ID