Entity framework 对内部集合的DbSet LINQ查询不会引发Argumentexception

Entity framework 对内部集合的DbSet LINQ查询不会引发Argumentexception,entity-framework,linq,dbcontext,dbset,Entity Framework,Linq,Dbcontext,Dbset,我遇到了这种奇怪的行为,想知道它的背后是什么,它是如何工作的 _dbContext.MyDbSet.Where(setItem => setItem.InnerCollection.All(...) ).ToList() 即使InnerCollection为null,这段代码也可以正常工作。令我惊讶的是,这两件作品在内部收藏中都有一个例外 _dbContext.MyDbSet.Local.Where(setItem => setItem.InnerCollectio

我遇到了这种奇怪的行为,想知道它的背后是什么,它是如何工作的

_dbContext.MyDbSet.Where(setItem =>
    setItem.InnerCollection.All(...)
).ToList()
即使InnerCollection为null,这段代码也可以正常工作。令我惊讶的是,这两件作品在内部收藏中都有一个例外

_dbContext.MyDbSet.Local.Where(setItem =>
    setItem.InnerCollection.All(...)
).ToList()

谁能解释一下这怎么可能?DbSet后面是否有
null
控制?
提前感谢。

第一个问题的答案非常简单:

使用时

_dbContext.MyDbSet.Where(setItem =>
    setItem.InnerCollection.All(...)
).ToList()
EF生成一个JOIN语句,并对数据库执行筛选,因此不会引发任何
ArgumentNullException


在筛选之前调用
Local
ToList()
时,将从数据库加载所有实体并在内存中进行筛选。因此,在此版本中,如果不包含相应的导航属性,并且出现
ArgumentNullException
异常,则列表为空。

有趣的想法。我现在意识到我的编辑是错误的,因为EF只返回了“main”实体,而没有返回内部集合-它是空的,所以一切看起来都很好,工作正常。
_dbContext.MyDbSet.Where(setItem =>
    setItem.InnerCollection.All(...)
).ToList()