var query = from r in list where r.Id == "" DefaultIfEmpty(String.Empty)
不起作用。DefaultIfEmpty在哪裏用linq查詢樣式
我該如何用查詢風格編寫linq查詢並使用DefaultIfEmpty方法?
var query = from r in list where r.Id == "" DefaultIfEmpty(String.Empty)
不起作用。DefaultIfEmpty在哪裏用linq查詢樣式
我該如何用查詢風格編寫linq查詢並使用DefaultIfEmpty方法?
假設您的列表中包含的類型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);
這個特定的問題顯示了多麼醜陋的查詢語法可。 +1的方法語法,我個人認爲查詢語法在這裏爲那些誰來與SQL背景,只是不明白的C#。 –
@KenKin我在說我在說什麼,只是沒有更多。查詢語法對於一些複雜的連接可能很有用,否則方法語法看起來更清晰可讀。此外,在VB查詢語法看起來不那麼冗長,甚至比方法語法更好+事實是,有SQL背景的人可以很容易地理解它=因爲它在C#和VB中。 –
@ taras.roshko:然後我刪除它。 –
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
};
@KenKin,謝謝編輯我的答案,你可以隨時去編輯答案,如果你認爲編輯可以改進它 – Habib
因爲我不知道你想要什麼來命名它.. –
_Doesn't WORK_是不是你的問題很好的解釋。你的'列表'是什麼? 「 –
」不起作用。「不是編譯器錯誤,是嗎?看看編譯器錯誤可以幫助你自己修復這些問題 –
看起來我錯過了圍繞查詢的大括號()以使intellisense工作很愚蠢。 – Elisabeth