2016-06-09 69 views
2

我使用連接並選擇查詢以傳遞特定實體的動態值,某些字段在數據庫中爲空。所以我檢查條件!=null條件,但如果我使用該字段,整個select語句會拋出錯誤。問題檢查使用linq查詢的空條件

我的代碼如下,

@placementId is as input value 

IEnumerable<Submission> sub= from cc in confirmedCarrierRepository 
    join cs in carrierSubmissionRepository on cc.ConfirmedCarrierID equals cs.ConfirmedCarrierID 
    where cr.PlacementID == placementId 
    //orderby c.panel is missed 

    select new SubmissionEntity 
    { 
     PlacementId = placementId, 
     //The ComissionId is null in db, 
     CommissionId = cs.CommisionID.HasValue ? cs.CommisionID.ToString() : string.Empty 
    } 

另一種方式:

CommissionId= cs.CommisionID!=null ? cs.CommissionID : new int() 

我不明白爲什麼。即使我檢查null條件也是如何可能整個選擇將無法正常工作。請幫我找出答案。

+0

什麼是新的INT(),這是值類型,然後初始化像一個引用類型,還什麼是「cs.CommisionID.HasValue」這樣做,也不會似乎是正確的。我可以理解cc,它是confirmCaarRepository,但是什麼是cs,你需要提供完整的代碼 –

+0

如果你想排除空的cs.CommisionID,那麼使用where子句,而不是你所做的,因爲這仍然會選擇所有的值,只是空值將被替換爲空字符串 –

+0

編輯我的問題。但是我正在檢查提交的內容是否爲空。它怎麼可能由哪裏條件檢查。如果有任何值應該返回,但沒有錯誤返回。 – PoliDev

回答

0

使用C#coalesce操作

CommissionId = (cs.CommisionID ?? 0).ToString(); 
+0

我也試過這個。但是,我仍然收到錯誤 – PoliDev

+0

你是否也想顯示null comisssion id爲空? – Sherlock

+0

@PoliDev你可以顯示這個類「SubmissionEntity」的定義嗎? – Sherlock

0

修改下面的語句在Join如下,這將確保最終的解決方案不僅沒有空CommisionID值的情況下,即要求:

當前:

join cs in carrierSubmissionRepository 

修改:

join cs in carrierSubmissionRepository.Where(c => c.CommisionID != null) 
0

如果您在IQueryable世界正在努力(這意味着你的LINQ必須生成一個數據庫查詢),那麼ToString()是不允許的。

您可以使用SqlFunctions.StringConvert

我不知道該HasValue也不準(你可能只是嘗試),但!= null肯定是不允許

假設CommissionId是在實體的int?

「字符串」方式

CommissionId = cs.ComissionId != null ? SqlFunctions.StringConvert((double)cs.CommmissionId) : string.Empty 

「int」方式

CommissionId= cs.CommisionID ?? 0 // or default(int), but not new(int)