1

我使用以下代码填充了匿名类型的排序列表。

var list = service.GetTenantsOverview()
                  .TenantsOverview
                  .Cast<TenantOverview>()
                  .Select(t => new { t.TenantId, t.Tenantnumber })
                  .OrderBy(t => t.Tenantnumber)
                  .ToList();

问题是,我需要将第三个项目移动到第一个位置。这意味着,我想将租户编号“任何”移动到第一个位置。但是没有找到任何合适的方法来做到这一点。

匿名类型列表生成并排序

对于解决方案,我编写了以下代码。

var item = list.First(f => f.Tenantnumber == "Any");
        list.Remove(item);
        list.Insert(0, item);

效果很好。 我的问题的解决方案

我想知道如何在单个语句中使用 LINQ 完成上述工作?或者是否可以在单个语句中做到这一点?

4

2 回答 2

1

尝试按租户编号是否为“Any”进行初始排序(注意默认情况下false在前面true,因此您需要将其降序排列):

busConfigurationService.GetTenantsOverview()
                       .TenantsOverview
                       .Cast<TenantOverview>()
                       .Select(t => new { t.TenantId, t.Tenantnumber })
                       .OrderByDescending(t => t.Tenantnumber == "Any")
                       .ThenBy(t => t.Tenantnumber)
                       .ToList()
于 2013-02-17T05:50:33.390 回答
1

使用 OrderBy 然后使用 ThenBy

yourCurrentQuery.OrderBy(t => t.Tenantnumber == "Any" ? 0 : 1)
                .ThenBy(t => t.Tenantnumber);

Ani 的答案大多展示了相同的技术,并且肯定会奏效。但是,我通常不喜欢依赖布尔值进行排序,因为我发现它不是很直观。我不希望所有人都会分享我相同的挂断。

于 2013-02-17T05:50:55.510 回答