2014-03-13 141 views
-2

有人可以請我解釋一下,匿名類型究竟做了什麼,可以做什麼?匿名類型c#排序

- >它是如何通過價值訂購,你怎麼辦呢降序或升序...有什麼區別代碼提前

.OrderBy(value=> value.numbers); 

感謝。

+1

你似乎在努力工作,今天你周圍LINQ的方式。看看http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b尋求幫助。 –

回答

3

OrderBy和匿名類型之間沒有任何關係。 OrderBy是一個LINQ函數,它需要一個lambda表達式,該表達式看起來像x => x.Something,基本上意味着對於xx.Something。您可能會混淆兩者,因爲您的訂單之前有一個生成匿名類型的Select。這並不重要。您可以通過任何IEnumerable<T>進行訂購。而且,在C#中,匿名類型幾乎與普通類型相同。他們的行爲真正不同的唯一方式就是執行反思任務。

2

Anonymous types是在您的源代碼中尚未定義的對象類型。相反,CLR將在編譯時定義它們。下面是使用在源代碼中的匿名類型的例子:

var anon = new { A = 1, B = 2, C = 3 }; 

至於排序依據,這是使用自IEnumerable繼承的對象上LINQ語法。 OrderBy(...)(或OrderByDescending(...))將對象的屬性作爲參數,並根據屬性的類型對IEnumerable中的所有項目進行排序。

1

OrderBy對Lambda評估的類型(例如整數)使用默認比較並使用它進行排序。相同的值以相對於彼此的原始順序出現。 OrderByDescending給你DESC的訂單。

2

只需.......

.OrderBy(value=> value.numbers); 

相同

.OrderBy(x=> x.numbers); 

甚至

.OrderBy(jedi=> jedi.numbers); 

的變體表示表達式的參數名稱。它由參數屬性進行排序,在這種情況下爲numbers

這種情況下的升序是自動的。 OrderByDescending(value=> value.numbers)是一種實現逆向的方法。

2

您提供的線基本上等同於類似:

yourListOfSomeType.OrderBy<someType>(value=> value.number); 

其中someType是必須包含一個成員number,可用於排序類型。

注:我將numbers更改爲number,因爲這樣做更有意義。這不會是一個事物清單,而是一個成員(說一個財產),每個SomeTypeyourListOfSomeType必須有。

實施例:

public class SomeType{ 
    public int numbers {get; set;} 
} 

<someType>缺少部分,假設.Net將能夠猜出的類型,和正確處理的邏輯。如果它不能,那麼它會拋出異常。

此外,請注意,代碼中的value只是用於在整個迭代過程中引用列表中的每個SomeType的變量的名稱;把它看作一個在括號內有效的變量名,並且簡單地指向每個SomeType


PS:要訂購降序排列的項目,使用LINQ的互補方法:

yourListOfSomeType.OrderByDescending(item => item.number);