2011-05-17 84 views
2

好的,我有一个Person实体,其中包含一组地址。人可能有零个或多个地址,这些地址有一个等级(int)。我希望能够通过地址集合中排名最低的地址的城市或州来对查询的结果进行排序。然而,收藏对某些人来说可能是空的这一事实使我发疯,而且我无法改变它。EF OrderBy一对多

像这样的事情,但没有异常,当地址集合为空

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

回答

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)); 
+0

好点,但我希望他们被列入名单。我将对城市进行排序,因此非地址人员可能会出现在列表的底部。 – Paul 2011-05-17 15:20:19