【问题标题】:How do I merge two count queries from one table?如何合并一张表中的两个计数查询?
【发布时间】:2020-12-06 11:50:50
【问题描述】:

第一个查询:

Id | UserId   |  projectId   |date   | Status
1  | 1        |  1           | 2020  | PENDDING
2  | 1        |  2           | 2020  | DONE
3  | 2        |  1           | 2020  | PENDDING

我尝试了两个查询: 第一个是关于 X 项目的所有用户工作,例如 id = 1

var FirstQery = context.table1.where (C => C.ProjectId == 1).count();

第二个查询是获取项目 x 具有“完成”状态的用户数

var SecondQery = context.table1.where (C => C.ProjectId == 1 && C.Status == "DONE").count();

我希望返回对象只有两个值:countNumberUserWithXProject 和 countNumberUserByXProjectHaveXStatus

【问题讨论】:

  • 最简单的方法:var obj = new { countNumberUserWithXProject = FirstQery, countNumberUserByXProjectHaveXStatus = SecondQery };
  • 是的,我想在一个查询中做到这一点?但我不知道如何

标签: c# linq join


【解决方案1】:

这是已知的虚假分组方法。

var query = 
   from t in context.table1
   where t.ProjectId == 1
   group t by 1 into g
   select new 
   {
      Count = g.Count(),
      DoneCount = g.Sum(x => x.Status == "DONE" ? 1 : 0)
   }

var result = query.FirstOrDefault();

【讨论】:

    【解决方案2】:

    返回一个anonymous object 怎么样(或者如果你更喜欢一个典型的对象,比如 int[])。

    return new {count1 = FirstQery , count2 = SecondQery };
    

    (返回,或赋值如 var result = new {count1....} 等

    您也可以直接将 FirstQuery 和 SecondQuery 替换为 Linq 查询。

    【讨论】:

    • 感谢您的回答,是的,这就是我想要的,我想在一个查询中使用 Linq 查询来做到这一点?但我不知道怎么做
    • @resstel 我认为按照您的要求去做是可能的,但它在性能方面没有任何优势,并且会使您的代码可读性降低。不好。如果我能给你这个建议,就这样吧。
    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 2022-08-14
    • 2021-02-02
    • 1970-01-01
    • 2012-11-05
    相关资源
    最近更新 更多