2012-05-25 42 views
0

我有一個查詢,看起來像這樣:LINQ到SQL NULL或默認

var TheQuery = (from.... 
       where x.TheDate >= StartDate && x.TheDate <= EndDate 
       select new MyModel() 
       { 
        Total = (int?)x.Count() ?? 0, 
        .... 
       }).Single(); 

基本上,我查詢了一些基於兩個日期之間的記錄。如果日期有0個值,則返回0作爲總計。但是,如果完全沒有值,它將返回null並崩潰。我可以添加.SingleOrDefault(),但它會返回null而不是使用0填充的MyModel。屬性Total被定義爲int。

我該如何解決這個問題?

由於

+0

你能顯示整個查詢嗎? –

+0

@OskarKjellin:就是這樣,from子句設置一個表,其他屬性的類型是相同的:用count來填充一個int。 – frenchie

回答

4

計數具有帶有謂詞的過載,並且當沒有條目匹配的返回0謂詞

var result = new MyModel { 
          Total = <yourDataSource> 
          .Count(x.TheDate >= StartDate && x.TheDate <= EndDate) 
          }; 
+0

正是我在想什麼。只需在'new MyModel'中添加'()'即可! ;) – Chopin

+0

不需要親愛的;) –

+0

對!我不知道! – Chopin

2
if(TheQuery !=null || TheQuery .Count()>0){ 
//do something you wanna do 

}

var v = TheQuery.ToList(); 
現在

檢查

if (v.Count > 0) 
+0

這很麻煩,我不能只是在查詢本身中指定它,而不是在查詢周圍添加條件? – frenchie

0

您應該選擇:

int count = (from x in ... 
where x.TheDate >= StartDate && x.TheDate <= EndDate 
select c).Count(); 

這就是你想要的。

0
var TheQuery = (from.... 
       where x.TheDate >= StartDate && x.TheDate <= EndDate 
       select new MyModel() 
       { 
        Total = (int?)x.Count() ?? 0, 
        .... 
       }).DefaultIfEmpty(0).Single()'