我有一个linq查询工作正常。如何在此查询中使用group by。我需要按用户名和itemid分组,我应该得到总和(金额)(所有都在表中称为Carts)
FoodContext db = new FoodContext();
List<CartListing> fd = (from e in db.FoodItems
join o in db.Carts on e.itemid equals o.itemid
where e.itemid == o.itemid
select new CartListing
{
Itemname =e.itemname,
Amount =o.amount,
Price=(float)(e.price*o.amount),
}).ToList();
CartModel vm = new CartModel { CartListings = fd };
答案 0 :(得分:1)
我在代码示例中的任何位置都看不到username
,但要按Itemname
和Amount
进行分组,您可以这样:
var grouped = fd.GroupBy(
cl => cl.Itemname,
(key, group) => new CartListing
{
Itemname = key,
Amount = group.Sum(cl => cl.Amount),
Price = group.Sum(cl => cl.Price)
});
要按用户名分组,只需生成一个包含这两个值的文本键,例如由您知道的字符分隔。
答案 1 :(得分:0)
使用:
var grouped = fd.GroupBy((a => new { a.itemid,a.name }) into grp
select new MyClass
{
MyProperty1=grp.key.itemid,
MyProperty2 =grp.Sum(x=>x.whatever)
}
Public MyClass
{
public string MyProperty1 {get;set;}
public int MyProperty2 {get;set;}
}
这种方式不会是匿名的