c# - Linq to SQL 从不返回正确结果的查询中返回多个计数

标签 c# linq linq-to-sql

我有一个 Linq to SQL 查询,我想为行数返回三个计数。一个用于不等于零的字段 (HaveCount),另一个用于不等于零的另一个字段 (WantCount),另一个用于不等于零的另一个字段 (SaleCount)。

这是我的查询...

var counts = (from a in dc.tblMemberIssues
              join b in dc.vwMembers on a.MemberID equals b.MemberID
              where a.IssueID == issueID
              group a by new { a.HaveCount, a.WantCount, a.SaleCount } into d
              select new
              {
                  HaveCount = d.Count(e => e.HaveCount != 0),
                  WantCount = d.Count(e => e.WantCount != 0),
                  SaleCount = d.Count(e => e.SaleCount != 0)
              }).First();

但是它没有返回预期的结果。我意识到分组是错误的,但我不确定如何获得所需的结果。

例如,如果查询的第一部分(分组之前)返回这两行...

---------------------------------
HaveCount | WantCount | SaleCount
---------------------------------
1         | 0         | 1
1         | 1         | 0

我的查询现在正在返回...(即只有一行)

1         | 0         | 1

但我希望它返回所有行的计数...

2         | 1         | 1

我需要对我的查询做些什么才能使其按我需要的方式工作?

注意。尝试仅通过单个数据库查询来执行此操作。

最佳答案

您不应该对计数中的列进行分组。如果我理解正确的话,你不想对任何东西进行分组,但 Linq 不允许这样,所以将 true 作为分组依据。 (或任何其他常数) 将您的查询更改为:

var counts = (from a in dc.tblMemberIssues
              join b in dc.vwMembers on a.MemberID equals b.MemberID
              where a.IssueID == issueID
              group a by true into d
              select new
              {
                  HaveCount = d.Count(e => e.HaveCount != 0),
                  WantCount = d.Count(e => e.WantCount != 0),
                  SaleCount = d.Count(e => e.SaleCount != 0)
              }).First();

关于c# - Linq to SQL 从不返回正确结果的查询中返回多个计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35928165/

相关文章:

c# - 如何在 C# 中反序列化具有前缀的 XML

c# - Entity Framework 代码优先 : How can I model a Customer/Address relationship?

c# - Linq-EF 中的自定义扩展方法等同于 SQL "IN"子句

linq-to-sql - Linq to SQL 查询在运行时确定

c# - 创建动态 linq 查询

nhibernate - 有关资源库及其域对象的Save方法的问题

C# - 静态方法中的参数线程安全吗?

c# - 第一个 View 必须始终称为 index.aspx 吗?

c# - 按顺序访问使用 LINQ 的 .Skip() 跳过的项目

c# - 检查是否有打开的数据库连接 asp.net/c#