2012-06-15 106 views
1

的方式,我有這樣的代碼:我的LINQ排序似乎並沒有被選我要求它

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。

任何人都可以明白爲什麼這是行不通的。我看過很難,但我不明白爲什麼排序依據和ThenBy似乎並沒有正常工作。

+0

這個錯誤可能在這裏:** item.RowKey.Substring(0,3)**。我認爲它應該是** item.RowKey.Substring(0,4)** –

+0

謝謝大家! – Alan2

回答

5

你通過rowkey的前3個字符,而不是4排序要使用4個字符,這樣做:

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

D'哦!我正要發佈一些無聊的約'子串()'捕捉關閉! –

+0

感謝。我看着谷歌,並看到不同的子字符串。我可能會不小心尋找java :-(我會標記你的答案是正確的。 – Alan2

2

Substring的第二個參數是length,沒有指標,我相信這是什麼你的代碼正在嘗試去做。您的代碼在當前狀態下是基於前三個字符進行排序的。變化:

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

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

你的子更改爲子串(0,4),如果你想獲得4個字符。第二個參數指定長度不是索引