首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq/Lambda复杂查询以获得两个不同字段的结果

问Linq/Lambda复杂查询以获得两个不同字段的结果
EN

Stack Overflow用户
提问于 2016-04-10 02:34:20
回答 2查看 60关注 0票数 1

嗨,我有一张桌子,有以下信息

代码语言:javascript
复制
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 

我要做的是通过每个storeId获得结果,并通过itemId获得每天的项目总数,所以看起来是这样的。

代码语言:javascript
复制
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

到目前为止,我已经完成了如果用户输入存储列表来获得结果的话,例如

代码语言:javascript
复制
  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()
                                              }
                       }

在概念上,查询看起来很好,但是它会中断,不会给出结果。请让我知道如何修复它,以获得所需的输出。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-10 07:09:41

必须同时按StoreID和ItemID进行分组,并选择其他值的和,结果如下:

变量结果=来自列表中的项

代码语言:javascript
复制
                      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)  

                     };
票数 0
EN

Stack Overflow用户

发布于 2016-04-10 03:03:32

应使用GroupBy按存储进行分组,然后按组和选择列。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36525094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档