2012-06-13 17 views
5

Czy ktoś może pomóc, pokazując mi jak sortować wyrażenie LINQ.Jak mogę sortować na wielu polach za pomocą LINQ?

mam następujące:

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

      }) 

Co chciałbym zrobić, to zrobić coś w rodzaju, co następuje:

1) Pierwsze cztery znaki lub RowKey pole
2) ShortTitle

Nie jestem pewien, jak zrobić sortowanie tylko na kilku znakach, a także nie wiem, jak wykonać sortowanie wtórne.

+0

próby .OrderByDescending (poz => {item.RowKey, item.ShortTitle}) –

+0

pomocą ThenBy [Metoda] (http://msdn.microsoft.com/en- us/library/bb535112.aspx). –

+0

możliwy duplikat [Jak korzystać z orderby z 2 polami w linq?] (Http://stackoverflow.com/questions/1989674/how-to-use-orderby-with-2-fields-in-linq) – V4Vendetta

Odpowiedz

8

Przez pierwsze cztery znaki, to, że w istniejącym rachunku, a następnie dodać ShortTitle potem

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

Należy pamiętać, że wyjątek zostanie zgłoszony, jeśli długość elementu.RowKey wynosi <4 – Tobias

1

Można użyć 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, 

     }) 

HTH Tobi

+0

Ale ja tylko teraz chcesz sortować na pierwszych czterech znakach RowKey. – Alan2

+0

item.Rowkey.Substring (0, Math.Min (4, item.RowKey.Length)) – Tobias

1

Można użyć 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, 

      }) 
1

Dla pierwszego wymogu, sortując podciągu, można przekazać Substring do drzewa wyrażenie:

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

(Ale być świadomi poza granicami wyjątkami .)

Do sortowania wtórnego użyj the ThenBy() method:

.ThenBy(item => item.ShortTitle) 

połączeniu:

.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, 

     }) 
Powiązane problemy