嗨说我有类型为Area的对象:
霍基蒂卡 达尼丁 斯图尔特岛 西海岸 因弗卡吉耳
我希望按名称订购它们:
areas.OrderBy(a => a.Name)
给我:
达尼丁 霍基蒂卡 因弗卡吉尔 斯图尔特岛 西海岸
这很好但是说我想把它变成一个有序列表,除了当前用户位置在顶部,所以如果它们在Invercargill中,列表将是:
因弗卡吉耳 达尼丁 霍基蒂卡 斯图尔特岛 西海岸
Linq可以吗?
答案 0 :(得分:1)
不确定。你可以通过bool订购:
areas.OrderByDescending(a => a.Equals(myArea, StringComparison.OrdinalIgnoreCase))
.ThenBy(a => a.Name);
如果这不适用于您的数据库,您可以尝试:
areas.Select(a => new { IsMyLocation = a.Equals(myArea, StringComparison.OrdinalIgnoreCase),
Area = a })
.OrderByDescending (a => a.IsMyLocation)
.Select(a => a.Area);
答案 1 :(得分:0)
string currentLocation = "Invercatgill"; // for instance
var sortedresult = areas.OrderBy(a => a.Name.Equals(currentLocation) ? 0 : 1)
.ThenBy(a => a.Name);
答案 2 :(得分:0)
使用Except
var currentLocation = new [] { user.CurrentLocation };
var otherAreas = areas.Except(currentLocation).OrderBy(x => x.Name)
var finalResult = currentLocation.Concat(otherAreas);