EF订单一对多

时间:2011-05-17 15:11:23

标签: entity-framework

好的,我有一个包含地址集合的Person实体。 Person可以具有零个或多个地址,并且这些地址具有rank(int)。我希望能够通过地址集合中排名最低的地址的城市或州来对查询结果进行排序。然而,对于某些人而言,这个集合可能是空的这一事实让我发疯,我无法改变它。

类似的东西,但地址集合为空时没有异常

ctx.People
     .OrderBy(p => p.Addresses
                       .OrderBy(a => a.Rank)
                       .First().City);

1 个答案:

答案 0 :(得分:1)

你不想只包括拥有地址的人吗?否则怎么办命令呢?

类似于未经测试的代码:

ctx.People
 .Where(p=>p.Addresses.Any())
 .OrderBy(p => p.Addresses
                   .OrderBy(a => a.Rank)
                   .First().City);

修改

我肯定会离开我的linq深度我敢肯定(我之前没有使用工会,只是从文档中猜测)但是如果你想要那些没有地址的人也不包括你想要的东西吗?行:

ctx.People
 .Where(p=>p.Addresses.Any())
 .OrderBy(p => p.Addresses
                   .OrderBy(a => a.Rank)
                   .First().City)
 .Union(
    ctx.People
    .Where(p=>p.Addresses.Any()==false));