我有一個LINQ建造建築物的名單,其中有包括用戶列表的領域:LINQ加入順序按則結果排序
List<Building> buildings = (from b in db.Buildings
join u in db.BuildingUsers on b.BuildingId equals u.BuildingId into bUsers
orderby b.BuildDate descending
select Building.Create(b, bUsers)).ToList();
用戶名不是我總是希望用戶。我真正想要的是第一個曾經輸入過的用戶,我認爲這是假定它是具有最低UserID的BuildingUser是正確的。所以我做的順序:
List<Building> buildings = (from b in db.Buildings
join u in db.BuildingUsers on b.BuildingId equals u.BuildingId into bUsers
orderby u.UserId ascending
select Building.Create(b, bUsers)).ToList();
這很好,除了現在我的整體建築物列表是一個尷尬的順序。 bUsers以正確的順序傳遞給Create方法,並處理FirstOrDefault()以獲取第一個用戶並處理其餘的部分。我希望BuildDate能夠整體建築清單的最終結果。
List<Building> buildings = (from b in db.Buildings
join u in db.BuildingUsers on b.BuildingId equals u.BuildingId into bUsers
orderby u.UserId ascending, b.BuildDate descending
select Building.Create(b, bUsers)).ToList();
當然,這不起作用,因爲現在它首先由UserId排序,然後由BuildDate排序並且不完全正確。
所以我想要一個訂單爲Join,而另一個訂單爲主要結果。我寧願不將它們分成多個方法,所以我不必改變構建建築物對象的方式。
你能嘗試做'buildings.OrderByDescending(b => b.BuildDate)'你填入你的第二個片段'排序依據u.UserId asending'樓後? – 2014-10-06 21:23:55
我認爲這是一個好主意。如果在LINQ中有辦法做到這一點,我很樂意聽到它。但是,如果沒有,我會以這種方式去。 – Suamere 2014-10-06 22:03:16
這是linq。我認爲你可以在一個聲明中做到這一點。只需在'ToList()'後加'OrderByDescending'即可。 – 2014-10-06 22:04:50