您好我有以下信息的表
id StoretId itemId Mon Tue Wed
1 1 20 33 10 5
2 1 21 1 0 3
3 1 20 3 2 1
4 2 21 2 1 1
5 2 20 1 1 1
6 2 21 4 4 5
我要做的是按itemId获取每个storeId的结果和每天的项目总数,所以它看起来像这样。
StoreId 1
itemId Mon Tue Wed
20 36 12 6
21 1 0 3
StoreId 2
itemId Mon Tue Wed
20 1 1 1
21 6 5 6
到目前为止,如果用户输入商店列表以获得结果,即表示
storelist= [{storeId :1}, {storeId: 2}, {storeId: 3}]
var results= DbContext.Set<stores>()
.Where(x=> storelist.Contains(x.storeId)
.Select(y=> new
{
storeId=y.storeId,
itemsdetails= DbContext.Set<maintable>()
.Select(m=> new
{
itemId=m.itemId.Distinct(),
Mon=m.Mon.Sum(),
Tue=m.Tue.Sum(),
Wed=m.Wed.Sum()
}
}
查询在概念上看起来很好,但它会中断并且不会给出结果。请让我知道如何修复它以获得所需的输出。 谢谢
答案 0 :(得分:1)
您应该使用GroupBy
按商店分组,然后按照组的总和选择列
var result = list.GroupBy(o => o.StoreId)
.Select((o, i) => new
{
ID = o.ElementAt(i).ID,
StoreId = o.Key,
Mon = o.Sum(x => x.Mon),
Tue = o.Sum(x => x.Tue),
Wed = o.Sum(x => x.Wed),
}).ToList();
答案 1 :(得分:0)
必须按StoreID和ItemID分组 并选择其他值的总和作为结果:
var result =来自列表中的项目
group item by new
{
item.StoreID,
item.ItemID
} into groupList
select new
{
StoreID = groupList.Key.StoreID,
ItemID = groupList.Key.ItemID,
mon = groupList.Sum(i => i.mon),
tue = groupList.Sum(i => i.tue),
wed = groupList.Sum(i => i.wed)
};