2010-09-27 6 views
7

Tôi đang sử dụng orderby IEnumerable để sắp xếp các mặt hàng của tôi ở định dạng tăng dần nhưng nó không hoạt động truy vấn của tôi là như thế này:IEnumerable OrderBy

IEnumerable<Step> steps = allsteps.Where(step => step.X <= Y); 

steps = steps.OrderBy(step => step.X); 

không nó Deffer sử dụng OrderBy hoặc OrderByDescending

tại sao?

Tôi muốn sử dụng Sum() phương pháp để tổng hợp một số mặt hàng và đơn đặt hàng hàng là rất quan trọng (có một số quy tắc)

Tôi đọc trong MSDN nên được liệt kê để làm việc nhưng whats cách tốt (tôi đã làm không thử nó).

EDIT: XY thuộc loại double. Tôi đã kiểm tra mục đầu tiên của các bước của mình (bước.First()) trong đồng hồ nhanh.

+2

loại X là gì? –

+1

Làm thế nào để bạn kiểm tra kết quả? –

+1

Khi bạn chỉ kiểm tra phần tử đầu tiên ... bạn có chắc tất cả các phần tử trong 'bước' không có cùng giá trị X không? – digEmAll

Trả lời

8

Trước hết, tại sao không chỉ giữ nó trên một dòng.

var steps = allsteps.Where(step => step.X <= Y).OrderBy(step => step.X); 

Như "vc 74" đã chỉ ra trong bình luận của ông, nếu X không phải là nguyên thủy hoặc không thực hiện IComparable hoặc IComparable<TypeOfX> sau đó bạn sẽ không thể ra lệnh cho danh sách của bạn, có hoặc không có LINQ .

3

này chỉ hoạt động như mong đợi:

// Create some random double values from 0 - 100 
var values = Enumerable.Repeat(new Random(), int.MaxValue) 
         .Select(r => r.NextDouble() * 100); 

//Create an enumeration with ten elements 
var pointList = values.Take(10) 
         //Cause of lacking support of IEnumerable.Zip() or .Pairwise() 
         //use this approach to create something with the properties X and Y 
         .Select(n => new PointF((float)n, (float)values.First())); 

//Sort the elements 
var sortedPoints = pointList.OrderBy(point => point.X); 

//Output to console 
foreach (var point in sortedPoints) 
{ 
    Console.WriteLine(point.ToString()); 
} 
3

Ran vào một vấn đề rất giống với điều này:

IEnumerable<Article> articles = StepThree.ReturnArticles(iUserID); 
lvPending.DataSource = articles; 
lvPending.DataBind(); 

Muốn thay đổi thứ tự các kết quả sau đó sẽ liên kết với listview của tôi, vì vậy tôi cố gắng này:

lvPending.DataSource = articles.OrderByDescending(a=> a.DateCreated); 

Nó đã được thi hành nhưng không cập nhật kết quả của tôi. Vì vậy, nhìn xa hơn tôi phát hiện ra rằng bởi vì tôi đang quay trở lại một loại LINQ phức tạp không thể đặt nó cho tôi, vì vậy tôi đã phải đi thêm thứ tự giảm dần trong tập tin StepThree.cs, nơi phương thức ReturnArticles được gọi.

+0

Hi david, câu hỏi này là cho khi tôi mới trong LINQ :) nó đã được sai lầm đơn giản và nó hoạt động tốt, nhưng tôi không thể nhìn thấy nó (tại thời điểm đó). –

+0

@SaeedAmiri: Vì bạn đã giải quyết được vấn đề của mình, nên thực hành tốt để đăng giải pháp của bạn cho những người khác tình cờ gặp phải bài đăng này. –

+0

@Matthew, Bạn có thể thấy các nhận xét về câu hỏi, trên thực tế không có vấn đề gì, danh sách có một phần tử. Tôi đã không xóa câu hỏi vì một số câu trả lời đã upvote và họ đã cố gắng giải quyết vấn đề. –