我的LINQ排序似乎没有按我要求的方式排序

时间:2012-06-15 04:43:03

标签: c#

我有这段代码:

var query = _cityRepository.GetAll(
                              u => u.PartitionKey == pk &
                              u.RowKey.CompareTo(lowerBound) >= 0 &
                              u.RowKey.CompareTo(upperBound) < 0)
               .OrderBy(item => item.RowKey.Substring(0, 3))
               .ThenBy(item => item.ShortTitle)
               .Select((t, index) => new City.Grid()
               {
                   PartitionKey = t.PartitionKey,
                   RowKey = t.RowKey,
                   Row = index + 1,
                   ShortTitle = t.ShortTitle,
                   Created = t.Created,
                   CreatedBy = t.CreatedBy,
                   Modified = t.Modified,
                   ModifiedBy = t.ModifiedBy
               })
               .ToList();

当我查看出来的数据时,我发现前两行有这个:

RowKey = 0101004O , ShortTitle = "Access 1"
RowKey = 0103004M , ShortTitle = "Access 2"
RowKey = 0101004K , ShortTitle = "xxx"

测试时,我将其简化为:

        var query1 = _cityRepository.GetAll()
            .OrderBy(item => item.RowKey.Substring(0, 3))
            .ThenBy(item => item.ShortTitle);

,顺序是一样的。仍然RowKey似乎没有正确的顺序。

应该对rowkey的前四个字符进行排序,然后对ShortTitle进行排序。

任何人都可以看到为什么这不起作用。我看起来很难,但我不明白为什么OrderBy和ThenBy似乎无法正常工作。

3 个答案:

答案 0 :(得分:5)

您按rowkey的前3个字符排序,而不是4个。要使用4个字符,请执行以下操作:

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

答案 1 :(得分:2)

Substring的第二个参数是length,而不是索引,我认为这是您的代码尝试执行的操作。处于当前状态的代码基于前三个字符进行排序。变化:

.OrderBy(item => item.RowKey.Substring(0, 3))

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

答案 2 :(得分:1)

如果要获得4个字符,请将子字符串更改为Substring(0,4)。第二个参数指定长度而不是索引