在Linq當我打電話給SingleOrDefault或FirstOrDefault時,如何爲特定對象返回非null值,例如。如何使默認(TSource)
List<CrazyControls> cc = CrazyControlRepository.All();
cc.SingleOrDefault(p => p.Id == id).Render();
如何讓我的CrazyControls返回實現基本render()方法的默認實例?
在Linq當我打電話給SingleOrDefault或FirstOrDefault時,如何爲特定對象返回非null值,例如。如何使默認(TSource)
List<CrazyControls> cc = CrazyControlRepository.All();
cc.SingleOrDefault(p => p.Id == id).Render();
如何讓我的CrazyControls返回實現基本render()方法的默認實例?
With DefaultIfEmpty(defaultValue)
。這將確保如果集合爲空,則將使用該類型的默認實例進行填充。
所以,你可以這樣做:
var defaultValue = new CrazyControl(...);
List<CrazyControls> cc = CrazyControlRepository.All();
cc.Where(p => p.Id == id).DefaultIfEmpty(defaultValue).First().Render();
需要改變一點查詢表達式。新的工作是這樣的:
DefaultIfEmpty
來確保序列只包含一個項目(如果它已經有一個,DefaultIfEmpty
什麼都不會做)。First
可以獲得單個項目。我沒有使用Single
而不是第一個的原因是,如果謂詞不同(或未來會發生變化)並且接受多個項目,則會拋出Single
。您需要定義要回到這個'東西」,如果沒有元素:
(cc.SingleOrDefault(p => p.Id == id) ?? new CrazyControls()).Render();
換句話說,你需要定義default value
。
該代碼片段很奇怪。你在問「所有」CrazyControls,然後在下一行中你說「拋出一個異常是有多個控件。」 – dlev
是啊......這有點奇怪但合法。如果有更多我想讓它爆炸的應該只有一個給定ID的CrazyControl。 – Peter