我有一个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