4 回答

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

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

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

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