2011-05-17 103 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