Linq按区域名称排序,但有一个例外

时间:2011-08-23 02:47:19

标签: linq linq-to-entities

嗨说我有类型为Area的对象:

霍基蒂卡 达尼丁 斯图尔特岛 西海岸 因弗卡吉耳

我希望按名称订购它们:

areas.OrderBy(a => a.Name)

给我:

达尼丁 霍基蒂卡 因弗卡吉尔 斯图尔特岛 西海岸

这很好但是说我想把它变成一个有序列表,除了当前用户位置在顶部,所以如果它们在Invercargill中,列表将是:

因弗卡吉耳 达尼丁 霍基蒂卡 斯图尔特岛 西海岸

Linq可以吗?

3 个答案:

答案 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);