交换匿名类型的项目位置

时间:2013-02-17 05:46:29

标签: c# linq linq-to-entities anonymous-types

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

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

问题是,我需要将第3个项目移动到第1个位置。这意味着,我想将Tenantnumber“Any”移到第一位置。但没有找到任何适当的方法来做到这一点。

Anonymous type list generated and sorted

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

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

工作正常。 Solution of my problem

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

2 个答案:

答案 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表现出大致相同的技巧,肯定会奏效。但是,我一般不喜欢依靠布尔来订购,因为我发现它并不是直观的。我不希望所有人都分享我同样的挂断。