EF过滤包括 - 许多子实体

时间:2014-04-03 11:54:05

标签: c# entity-framework linq-to-entities

在过滤子实体时遇到一些问题。 我知道EF并不支持过滤包含但我无法获得任何其他替代方案。

var q = from sWithA in
                    (from s in db.Svs
                     where s.Env.UID.Equals(env)
                     select new
                     {
                         Svs= s,
                         Cons= from c in s.Cons
                                      where c.Apps.Any(a => a.AppT.Type.Equals(appT))
                                      select c
                     }).AsEnumerable()
                select sWithA.Svs;
List<Svs> svsList = q.ToList();

这实际上会生成一个SQL查询,它返回我需要的信息,但子实体没有附加到父项。

svsList包含两个Svs对象,但子集合(Cons)为空。

Svs&lt;多对多&gt;缺点&lt;多对一&gt;应用

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您显然试图利用的关系修复技巧不适用于多对多关系,仅适用于一对一和一对多关系。对于多对多关系,您必须手动修复导航集合,例如:

List<Svs> svsList = (from s in db.Svs
                     where s.Env.UID.Equals(env)
                     select new
                     {
                         Svs = s,
                         Cons = from c in s.Cons
                                where c.Apps.Any(a => a.AppT.Type.Equals(appT))
                                select c
                     })
                     .AsEnumerable()
                     .Select(sWithA =>
                     {
                         sWithA.Svs.Cons = sWithA.Cons.ToList();
                         return sWithA.Svs;
                     })
                     .ToList(); 

是的,它很丑陋,看着这个代码,我真的错过了过滤的Include支持。