问题
使用以下linq代码片段,我得到一个客户列表,其中包含按规范过滤的地址,但返回的实体形式不是我所期望的。
数据是1个客户端,有2个地址,1个客户端有1个地址。
查询返回3行客户端,每行客户端有1个地址
客户2 =>地址3
var query = from t1 in context.Clients.Where(specification.SatisfiedBy()).Include("ClientAddresses")
join t2 in context.ClientAddresses.Where(spec.SatisfiedBy())
on t1.ClientKey equals t2.ClientKey
select t1;
我的期望更像是一个只包含两个客户的列表,一个客户端有两个地址的集合,一个客户端有一个地址的集合。
我缺少什么?
谢谢!
答案 0 :(得分:1)
query = query.Distinct();
?
您可能需要了解如何编写规范以提供更多数据。
例如,我不明白为什么你的查询不是这样的:
var query = from t1 in context.Clients.Include("ClientAddresses")
where specification.SatisfiedBy() &&
t1.ClientAddresses.Any(spec.SatisfiedBy())
select t1;
看看这是否有效。不确定EF支持多少。它与您的原始查询非常相似
var query = (from t1 in context.Clients.Where(specification.SatisfiedBy())
.Include("ClientAddresses")
from t2 in context.ClientAddresses.Where(spec.SatisfiedBy())
where t1.ClientKey == t2.ClientKey
select t1)
.Distinct();