初学者Linq语法和EF4问题

时间:2011-01-08 01:20:38

标签: linq entity-framework-4

问题

使用以下linq代码片段,我得到一个客户列表,其中包含按规范过滤的地址,但返回的实体形式不是我所期望的。

数据是1个客户端,有2个地址,1个客户端有1个地址。

查询返回3行客户端,每行客户端有1个地址

  • 客户1 =>地址1
  • 客户1 =>地址2
  • 客户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;
    

我的期望更像是一个只包含两个客户的列表,一个客户端有两个地址的集合,一个客户端有一个地址的集合。

  • 客户1 =>地址1 /地址2
  • 客户2 =>地址3

我缺少什么?

谢谢!

1 个答案:

答案 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();