簡體   English   中英

LINQ to Entities group by和Count()

[英]LINQ to Entities group by and Count()

我有以下LINQ到實體查詢

from r in ctx.Rs
join p in ctx.Ps on r.RK equals p.RK
group r by r.QK into gr
select new { QK = (int)gr.Key, Num = gr.Count() }

針對此架構運行

Table P  Table R   Table Q
 PK*
 RK ----> RK*
 Text     QK ------> QK*
          Text       Text

如果Q中有任何記錄,並且P中沒有相應的記錄,則給出此消息:“轉換為值類型'Int32'失敗,因為具體化值為null。結果類型的泛型參數或查詢必須使用可空類型。 “

問題是最后一行中的gr.Count(),但我找不到解決方案。 我試圖測試gr為null,但找不到有效的方法。

我已經看到使用Sum()而不是Count()的類似問題的一些解決方案,但我無法使它們適應我的問題。

我嘗試將查詢更改為在Linq問題中的Group和Count中的查詢,但我只是得到了不同的消息。

我還查看了實體框架中的Group and Count (以及其他一些),但問題不同。

組鍵不能為空

var results = ctx.Rs.Where(r => r.QK != null)
    .GroupBy(r => r.QK)
    .Select(gr => new { Key = (int)gr.Key, Count = gr.Count() }
    .ToList();

PS。

  1. 大多數情況下,您不需要Entity Framework中的“JOIN”語法。 請參閱: 加載相關實體

  2. 編寫具有描述性的有意義的變量名稱可以顯着改善您的代碼並使其易於理解。 可讀性在現實生產中很重要。

我在閱讀你的格式時遇到了麻煩。 但是你可以嘗試:

from r in ctx.Rs
join p in ctx.Ps.DefaultIfEmpty() on r.RK equals p.RK
group r by r.QK into gr
select new { QK = (int)gr.Key, Num = gr.Count(x => x.RK != null) }

使用DefaultIfEmptyx => x.RK != null作為更改。

暫無
暫無

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

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