如何使用LINQ对多个字段进行排序?

时间:2012-06-13 08:39:52

标签: c# linq

有人可以通过向我展示如何对LINQ表达式进行排序来提供帮助。

我有以下内容:

 .OrderByDescending(item => item.RowKey)
 .Select((t, index) => new City.Grid()
           {
               PartitionKey = t.PartitionKey,
               RowKey = t.RowKey,
               Row = index + 1,
               ShortTitle = t.ShortTitle,

           })

我想做的是对以下内容进行排序:

1)前四个字符或字段RowKey
2)ShortTitle

我不确定如何对几个字符进行排序,也不确定如何进行二次排序。

5 个答案:

答案 0 :(得分:8)

对于前四个字符,请在现有语句中包含该字符,然后再添加ShortTitle

.OrderByDescending(item => item.RowKey.Substring(0,4))
.ThenBy(item => item.ShortTitle)

答案 1 :(得分:1)

您可以使用OrderByDescending(...)。ThenBy()...

.OrderByDescending(item => item.RowKey.Substring(0, Math.Min(4, item.RowKey.Length)))
.ThenBy(item => item.ShortTitle)
.Select((t, index) => new City.Grid()
       {
           PartitionKey = t.PartitionKey,
           RowKey = t.RowKey,
           Row = index + 1,
           ShortTitle = t.ShortTitle,

       })

H个 托比

答案 2 :(得分:1)

您可以使用ThenByThenByDescending添加第二个键进行排序。

答案 3 :(得分:1)

您可以使用Enumerable.ThenBy method

.OrderByDescending(item => item.RowKey)
.ThenByDescending(item => item.ShortTitle)
 .Select((t, index) => new City.Grid()
           {
               PartitionKey = t.PartitionKey,
               RowKey = t.RowKey,
               Row = index + 1,
               ShortTitle = t.ShortTitle,

           })

答案 4 :(得分:1)

对于第一个要求,按子字符串排序,您可以将Substring传递到表达式树中:

.OrderByDescending(item => item.RowKey.Substring(0, 4))

(但要注意超出范围的例外情况。)

对于辅助排序,请使用the ThenBy() method

.ThenBy(item => item.ShortTitle)

组合:

.OrderByDescending(item => item.RowKey.Substring(0, 4))
.ThenBy(item => item.ShortTitle)
.Select((t, index) => new City.Grid()
       {
           PartitionKey = t.PartitionKey,
           RowKey = t.RowKey,
           Row = index + 1,
           ShortTitle = t.ShortTitle,

       })