在过滤子实体时遇到一些问题。 我知道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;应用
有什么想法吗?
答案 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
支持。