簡體   English   中英

如何糾正以下linq?

[英]how to correct the following linq?

我有以下LINQ語句:

var inspectorAllocSummary = context
    .UserDetails
    .Where(ud => ud.PerformAudit == true && ud.Valid == true)
    .OrderBy(ud => ud.Firstname)
    .Select(ud
        => new InspectorWorkStatusModel
           {
               InspectorName = ud.Firstname,

               ToBeCompleted = context
                   .InspectorWorkAllocations
                   .Where(x => x.UploadCOESDetails.AuditMonth
                                   == criteria.AuditMonth 
                               && x.InspectorId == ud.Id)
                   .Sum(x=> x.ToBeAudited) ?? 0,

               Completed = context
                   .COESDetails
                   .Where(x => x.UploadCOESDetails.AuditMonth
                                   == criteria.AuditMonth 
                               && x.InspectorId == ud.Id
                               && x.AuditType != null)
                   .Count()
           });

ToBeCompleted是一個整數,它從數據庫中獲取數據,但如果它是null,我想確保它設置為0 我嘗試了以下方法:

ToBeCompleted = context
    .InspectorWorkAllocations
    .Where(x => x.UploadCOESDetails.AuditMonth == criteria.AuditMonth
                && x.InspectorId == ud.Id)
    .Sum(x=> x.ToBeAudited) ?? 0

但是我收到以下錯誤:

接線員'??' 不能應用於'int'和'int'類型的操作數

如果返回數據為null ,如何確保將其設置為零?

如果ToBeAudited是一個int那么Sum永遠不會返回null ,它總是返回一個int 如果集合是空的,它將返回0.只是起飛?? 0 ?? 0

但是,如果生成的SQL不返回任何記錄,則Linq-to-SQL和Linq-to-Entities 可能會拋出錯誤。 對於Linq-to-SQL,一個“修復”是將底層字段轉換為可空類型:

.Sum(x=> (int?)x.ToBeAudited) ?? 0

對於Linq-to-Entities,修復方法是調用.DefaultIfEmpty()

.Select(x=> x.ToBeAudited)
.DefaultIfEmpty(0)
.Sum()

首先,您需要將ToBeAudited的類型ToBeAuditedint? 問題來自於int值類型並且不能包含null的事實。 這就是為什么在你的第一種方法中你得到錯誤:

轉換為值類型“Int32”失敗,因為實現值為null。

有一個Sum重載,它接受可以為空的值。 因此,在ToBeAudited可以為空之后,這就足夠了:

ToBeCompleted = context
    .InspectorWorkAllocations
    .Where(x => x.UploadCOESDetails.AuditMonth == criteria.AuditMonth
                && x.InspectorId == ud.Id)
    .Sum(x => x.ToBeAudited).Value;

你不需要?? 運算符,因為null值被自動忽略(對於空序列, Sum將返回0 )。

暫無
暫無

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

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