簡體   English   中英

Linq to SQL從查詢返回多個計數而不返回正確的結果

[英]Linq to SQL to return multiple counts from query not returning correct results

我有一個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();

看來您需要將counts保存到列表中,然后獲取每種計數類型的計數,如下所示:

var counts = (from a in dc.tblMemberIssues
    join b in dc.vwMembers on a.MemberID equals b.MemberID
    where a.IssueID == issueID).ToList();

var results = new
{
    HaveCount = counts.Count(e => e.HaveCount != 0),
    WantCount = counts.Count(e => e.WantCount != 0),
    SaleCount = counts.Count(e => e.SaleCount != 0)
};

您也可能需要加和:

var results = new
{
    HaveCount = counts.Sum(e => e.HaveCount),
    WantCount = counts.Sum(e => e.WantCount),
    SaleCount = counts.Sum(e => e.SaleCount)
};

如果即使某些初始計數可能大於1,如果您只想計算非零的數量,請使用第一個查詢,否則,請使用第二個查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM