C# EF筛选包含-多个子实体

C# EF筛选包含-多个子实体,c#,entity-framework,linq-to-entities,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,

在筛选子实体时遇到一些问题。 我知道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();
var q=来自瑞士
(来自数据库Svs中的s)
其中s.Env.UID.Equals(Env)
选择新的
{
Svs=s,
Cons=从c到s。Cons
其中c.Apps.Any(a=>a.AppT.Type.Equals(AppT))
选择c
}).可计算的()
选择sWithA.Svs;
List svsList=q.ToList();
这实际上会生成一个SQL查询,返回我需要的信息,但子实体没有附加到父实体

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

Svs<多对多>Cons<多对一>应用程序


有什么想法吗?

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

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(); 
List svsList=(从db.Svs中的s开始)
其中s.Env.UID.Equals(Env)
选择新的
{
Svs=s,
Cons=从c到s。Cons
其中c.Apps.Any(a=>a.AppT.Type.Equals(AppT))
选择c
})
.可计算的()
.选择(sWithA=>
{
sWithA.Svs.Cons=sWithA.Cons.ToList();
返回sWithA.Svs;
})
.ToList();

是的,它很难看,看看这段代码,你真的错过了过滤的
包含
支持。

用ToList()替换AsEnumerable()?这仍然是多对多关系中过滤“包含”的首选解决方案吗?