2013-04-02 71 views
2
var query = from r in list where r.Id == "" DefaultIfEmpty(String.Empty) 

不起作用。DefaultIfEmpty在哪裏用linq查詢樣式

我該如何用查詢風格編寫linq查詢並使用DefaultIfEmpty方法?

+2

_Doesn't WORK_是不是你的問題很好的解釋。你的'列表'是什麼? 「 –

+0

」不起作用。「不是編譯器錯誤,是嗎?看看編譯器錯誤可以幫助你自己修復這些問題 –

+0

看起來我錯過了圍繞查詢的大括號()以使intellisense工作很愚蠢。 – Elisabeth

回答

2

假設您的列表中包含的類型Item你會想:

// define your default item 
var defaultItem = new Item { ... }; 

var query = (from r in list where r.Id == "" select r).DefaultIfEmpty(defaultItem); 

或方法的語法

var query = list.Where(r => r.Id == "").DefaultIfEmpty(defaultItem); 

但是,如果你選擇的Item特定字符串屬性,那麼你可能要像

var query = (from r in list where r.Id == "" select r.StringProperty) 
      .DefaultIfEmpty(string.Empty); 
+0

這個特定的問題顯示了多麼醜陋的查詢語法可。 +1的方法語法,我個人認爲查詢語法在這裏爲那些誰來與SQL背景,只是不明白的C#。 –

+0

@KenKin我在說我在說什麼,只是沒有更多。查詢語法對於一些複雜的連接可能很有用,否則方法語法看起來更清晰可讀。此外,在VB查詢語法看起來不那麼冗長,甚至比方法語法更好+事實是,有SQL背景的人可以很容易地理解它=因爲它在C#和VB中。 –

+0

@ taras.roshko:然後我刪除它。 –

1

DefaultIfEmpty被使用通常是JOINS(外連接)。 您可能會看到:How to: Perform Left Outer Joins (C# Programming Guide)

對於你的情況apears要選擇空字符串,如果r.Id爲空,你可以,你可以這樣做:

var query = from r in list 
      select new 
       { 
       ID = r.Id == null ? string.Empty : r.Id 
       }; 
+0

@KenKin,謝謝編輯我的答案,你可以隨時去編輯答案,如果你認爲編輯可以改進它 – Habib

+0

因爲我不知道你想要什麼來命名它.. –