我是Entity框架的新手,努力做到正确。 我有sql server三个表,
我正在使用数据库第一种方法和实体框架5.生成的DbContext只有2个类(映射表没有对应的类)。
父类有ICollection<Child>
,子类有ICollection<Parent>
。
如果我使用
,我想获得基于父ID的子对象列表context.Parent
.Include(f => f.Child)
.FirstOrDefault(f => f.ParentId == RequiredParentId)
其中RequiredParentId是我的过滤器。这给了我父对象,但是我想只检索Parent中的子列表。如果我将其更改为
context.Parent
.Include(f => f.Child)
.FirstOrDefault(f => f.ParentId == RequiredParentId)
.Child
然后如果父级不在数据库中,则“.Child”将抛出异常。此外,我不想为父母加载任何数据,我只是想根据父ID获取子列表。
我也试过用另一种方式写作
context.Child
.Include(f => f.Parent)
.Select(f => f.Parent.FirstOrDefault().ParentId == RequiredParentId);
如果父母没有孩子,.Select(f => f.Parent.FirstOrDefault().ParentId
将再次抛出异常。
答案 0 :(得分:3)
您是否尝试过以下操作?
context.Parent.Where(e => e.ParentId == RequiredParentId).SelectMany(e => e.Child)
如果父母不存在或者不存在子女,则结果集合将为空。
注意:如果有多个父母具有相同的ID,则这将加入每个的子女(具有重复)。我假设ParentId是Parent的密钥,因此不会有重复