2009-12-01 67 views
5

Có thể ai đó vui lòng giúp tách rời các yếu tố ở đây và giúp tôi hiểu chúng là gì?OrderByDescending() trên MSDN, điều này có nghĩa là gì?

public static IOrderedEnumerable<TSource> OrderByDescending<TSource, TKey>(
    this IEnumerable<TSource> source, 
    Func<TSource, TKey> keySelector 
) 

TSource và TKey là gì? KeySelector là gì? Cái quái gì là IOrderedEnumerable?

Func <> làm gì ??

Tại sao MSDN khó hiểu?

+1

Bạn chưa đăng câu hỏi cực kỳ giống nhau chưa? http://stackoverflow.com/questions/1827209/how-did-you-learn-master-c-linq-to-sql – Brandon

+1

không, nhưng trong khi tôi đang viết câu hỏi đó, tôi đã quyết định hỏi câu hỏi này để biết chi tiết về điều này , đó là câu hỏi khác về việc học LINQ to SQL, câu hỏi này là về khối mã cụ thể này. – BigOmega

+1

Tôi đoán bạn nên học các lớp học chung chung cũng như các biểu thức lambda. MSDN sẽ không còn khó hiểu nữa. –

Trả lời

11

Break Down

  • TSource: Đây là loại của các yếu tố trong bộ sưu tập mà cần phải được đặt
  • TKey: Chìa khóa loại bởi đó các phần tử được sắp xếp.
  • Func<TSource,TKey>: Delegate mà sẽ trả về một chìa khóa cho một yếu tố được đưa ra trong bộ sưu tập

Chức năng này về cơ bản là một chức năng phân loại. Như vậy nó cần một cách để so sánh các yếu tố trong bộ sưu tập. Phương pháp cụ thể này giả định rằng đối với một đối tượng nhất định có một giá trị khóa tương ứng mà chúng có thể được sắp xếp.

Đưa ví dụ như lớp Student sau

class Student { 
    string Name { get; set; } 
    ... 
} 

Nếu tôi muốn sắp xếp một bộ sưu tập của Student trường theo tên của họ tôi có thể làm như sau

IEnumerable<Student> col = GetTheStudents(); 
var ordered = col.OrderByDescending(x => x.Name); 

Trong trường hợp này các giá trị sẽ là như sau

  • TSource: Student
  • TKey: String
  • Func<TSource,TKey>: Đây là thông qua trong biểu thức lambda x => x.Name
+0

Phản hồi tuyệt vời, một điều nữa: Tôi gặp khó khăn khi hiểu nơi bạn nhận được x, hoặc là x đang được tuyên bố ngay tại đó? Tại sao 'bằng với chúng ta lớn hơn'? – BigOmega

+0

Tương tự như vậy nếu bạn chỉ cần đặt '=' hoặc nếu bạn đặt '= <' (bằng hoặc nhỏ hơn)? – BigOmega

+2

@Ryan, x được khai báo là một phần của biểu thức lambda. Một hình thức mở rộng hơn là sau: delegate (string x) {return x.Name;} – JaredPar

3

Tôi chỉ tự hỏi, những gì là chính xác không rõ ràng trên MSDN? Đây là topic: http://msdn.microsoft.com/en-us/library/bb548916.aspx

Và đây là một số câu trả lời cho câu hỏi của bạn từ chủ đề đó:

Loại Các tham số

TSource - Các loại các yếu tố của nguồn.

TKey - Loại khóa được trả về bởi keySelector.

thông số

nguồn - Một chuỗi các giá trị để đặt hàng.

keySelector - Một hàm để trích xuất khóa từ phần tử.

trình so sánh - Một IComparer để so sánh các khóa.

Return Value

Một IOrderedEnumerable mà các thành phần đều được sắp xếp theo thứ tự giảm dần theo một chìa khóa.

Ngoài ra, còn có nhận xét và ví dụ. Những gì bạn đăng ở đây chỉ là chữ ký của phương thức.

+0

ok bạn nói đúng, tôi đã bị thất vọng, tôi đoán nó không phải là MSDN khó hiểu với tôi đó là LINQ :) – BigOmega

+1

I ' d nói rằng nó không chỉ là LINQ. C# đã thay đổi rất nhiều từ 1,0 đến 3,0. Có lẽ, nó sẽ là tốt cho bạn để chỉ nhận được một cuốn sách tốt về C# 3.0 và đọc về generics, phương pháp mở rộng, biểu thức lambda, đại biểu, và có, LINQ. Ngay bây giờ nó seams mà bạn chỉ đơn giản là không thể đọc cú pháp C# mới. –

Các vấn đề liên quan