我使用以下代码填充了匿名类型的排序列表。
var list = service.GetTenantsOverview()
.TenantsOverview
.Cast<TenantOverview>()
.Select(t => new { t.TenantId, t.Tenantnumber })
.OrderBy(t => t.Tenantnumber)
.ToList();
问题是,我需要将第3个项目移动到第1个位置。这意味着,我想将Tenantnumber“Any”移到第一位置。但没有找到任何适当的方法来做到这一点。
对于解决方案,我已经编写了以下代码。
var item = list.First(f => f.Tenantnumber == "Any");
list.Remove(item);
list.Insert(0, item);
工作正常。
我想知道如何在单个语句中使用LINQ完成上述工作?或者是否可以在一个声明中做到这一点?
答案 0 :(得分:1)
根据租户号码是否为“任意”尝试初始排序(请注意false
默认位于true
之前,因此您需要让它下降):
busConfigurationService.GetTenantsOverview()
.TenantsOverview
.Cast<TenantOverview>()
.Select(t => new { t.TenantId, t.Tenantnumber })
.OrderByDescending(t => t.Tenantnumber == "Any")
.ThenBy(t => t.Tenantnumber)
.ToList()
答案 1 :(得分:1)
使用OrderBy然后使用ThenBy
yourCurrentQuery.OrderBy(t => t.Tenantnumber == "Any" ? 0 : 1)
.ThenBy(t => t.Tenantnumber);
Ani's answer表现出大致相同的技巧,肯定会奏效。但是,我一般不喜欢依靠布尔来订购,因为我发现它并不是直观的。我不希望所有人都分享我同样的挂断。