2010-10-19 28 views
5

Tôi có một lớp được gọi là "Đơn hàng" có tài sản của "Thành phố" trong số những người khác. Tôi đang cố gắng viết một câu lệnh LINQ sẽ nhận tất cả các thành phố riêng biệt từ danh sách các đơn đặt hàng và trả lại chúng dưới dạng danh sách các chuỗi.Trợ giúp với LINQ khác biệt()

Đây là những gì tôi có bây giờ.

public List<string> GetOrderCities(List<Order> orders) 
{ 
    IEnumerable<string> cities= from o in orders 
           select o.City.Distinct().ToString(); 

    return cities.ToList(); 

} 

Tuy nhiên, khi tôi chạy điều này bằng cách chuyển danh sách đơn hàng, dường như tôi không nhận được gì. Danh sách trống khi nó quay trở lại. Các đơn đặt hàng tôi chuyển qua tất cả đều có giá trị Thành phố. Tôi có chỉ làm việc này sai không? Cảm ơn!

Trả lời

12

Bạn đang kết hợp phương thức Distinct().

Thay đổi nó để

return orders.Select(o => o.City).Distinct().ToList(); 

Hoặc, sử dụng cú pháp hiểu truy vấn:

return (from o in orders 
     select o.City 
     ).Distinct().ToList(); 

(Lưu ý dấu ngoặc đơn)

Mã của bạn gọi Distinct trên City tài sản riêng của mình, mà là một chuỗi .
Vì lớp String triển khai IEnumerable<char>, phương thức này trả về một IEnumerable<char> chứa tất cả các ký tự độc đáo trong chuỗi.
Sau đó, bạn gọi số ToString() trên số này (đây là loại trình lặp được tạo bởi trình biên dịch từ System.Core.dll), luôn trả về System.Linq.Enumerable+d__81`1[System.Char].

Thay vào đó, bạn cần gọi số .Distinct() trên số IEnumerable<string> được trả về theo phương pháp Select.

+0

Rất tiếc, bạn không chắc chắn cách thêm C trong đó. Đây chỉ là lỗi đánh máy trên bài đăng. Mã này được chọn s.City.Distinct(). ToString(); – twal

+0

Ok Tôi nghĩ tôi hiểu. cảm ơn bạn. Tôi sẽ thực hiện thay đổi và cho nó một shot. Cảm ơn – twal

+0

Hoàn hảo! Tôi cảm ơn bạn! – twal

1

Bạn có thể gắn bó với cách thức bạn đang thực hiện cuộc gọi với các điều chỉnh nhỏ ... bạn cần phải quấn vùng chọn, sau đó gọi Distinct() trên đó và sau đó đẩy nó đến List.

List<string> cities = (from o in orders 
         select o.City).Distinct().ToList(); 

      return cities; 
Các vấn đề liên quan