我正在尝试为存储库编写扩展方法。存储库有一个方法IQueryable<parent>
GetAll()。我想创建一个扩展方法FilterByChildId(int childId),以便我可以写:
List<parent> data = from d in repository.getAll().FilterByChildId(33).ToList()
不确定如何在扩展方法中对父级和子级进行连接。 我觉得它会是这样的:
public static IQueryable<parent> FilterByChildId(
this IQueryable<parent> query,
int id)
{
return from data in query where data.child.id == id select data
}
但不是机会。我尝试了使用join,groupjoin但不点击的各种变体。 任何帮助将不胜感激。
答案 0 :(得分:2)
我基本上和你一样写。
public static IQueryable<Parent> FilterByChildId(
this IQueryable<Parent> parents, Int32 id)
{
return parents.Where(p => p.Child.Id == id);
}
只需使用我的一个Entity Framework模型进行检查即可。我假设一个简单的多(父)到一(子)关系,如代码所示。请注意,这有点令人困惑 - 许多父母为一个孩子。可能是你有多对多关系吗?一个父母可能有很多孩子,一个孩子可能有多个父母?然后,代码中的Childs
(child
)将成为一个集合,代码必须按如下方式进行更改。
public static IQueryable<Parent> FilterByChildId(
this IQueryable<Parent> parents, Int32 id)
{
return parents.Where(p => p.Childs.Any(c => c.Id == id));
}
第三个可能性是父母一方有很多孩子。第二种方法适用于这种情况,但假设子ID是唯一的,总是至少返回一个父级。