4 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個贊
我不知道為什么人們一直支持這樣的解決方案:
Include(p => p.NavProp ?? new List<NavPropType>())
因?yàn)槟切胁煌?,所以對以下?nèi)容無效Include()
:
無效操作異常:
Include 屬性 lambda 表達(dá)式
p => (p.NavProp ?? value(System.Collections.Generic.List'1[NavPropType]))
無效。該表達(dá)式應(yīng)表示屬性訪問:t => t.MyProperty
。要定位在派生類型上聲明的導(dǎo)航,請指定目標(biāo)類型的顯式類型 lambda 參數(shù),例如
(Derived d) => d.MyProperty
。有關(guān)包含相關(guān)數(shù)據(jù)的詳細(xì)信息,請參閱http://go.microsoft.com/fwlink/?LinkID=746393。
解決方案:使用默認(rèn)值聲明您的屬性:
public class Foo{ public List<Bar> Bars { get; set; } = new List<Bar>();}
這確保Bars
不會null
在沒有找到相關(guān)記錄時出現(xiàn)。

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個贊
返回空子而不是 null
Context.PersonSet.Include(a => ((a.Child == null) ? new Collection<Child>() : a.Child));

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個贊
如果他們有任何孩子,您可以使用 GroupJoin 來獲取所有人并加載他們的孩子:(考慮在這種方法中,您應(yīng)該在您的上下文中有 DbSet of Children)
Context.PersonSet.GroupJoin(Context.Children, p => p.Id, c => c.PersonId, (p, c) => new { Person = p, Child = c }).ToList();

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個贊
例外不應(yīng)該來自那條線。Include()
應(yīng)該使用LEFT JOIN
完全符合您要求的 a :“我想獲取所有人員,如果孩子不為空,我想包括它”。要確認(rèn)這一點(diǎn),請檢查從 LINQ 生成的 SQL。
要解決此問題,請查看使用查詢結(jié)果的代碼abc
并查看它是否正確處理Child
集合(即檢查集合是否為空)。
- 4 回答
- 0 關(guān)注
- 219 瀏覽
添加回答
舉報