2010-08-19 26 views
89

tôi có một danh sách như thế này:Làm cách nào tôi có thể thực hiện SELECT UNIQUE với LINQ?

Red 
Red 
Brown 
Yellow 
Green 
Green 
Brown 
Red 
Orange 

Tôi cố gắng để làm một SELECT UNIQUE với LINQ, tức là tôi muốn

Red 
Brown 
Yellow 
Green 
Orange 

var uniqueColors = from dbo in database.MainTable 
        where dbo.Property == true 
        select dbo.Color.Name; 

sau đó tôi đã thay đổi này để

var uniqueColors = from dbo in database.MainTable 
        where dbo.Property == true 
        select dbo.Color.Name.Distinct(); 

với không thành công. Đầu tiên select được TẤT CẢ các màu sắc, vậy làm thế nào để tôi sửa đổi nó để chỉ nhận được các giá trị duy nhất?

Nếu có cách tốt hơn để cấu trúc truy vấn này, vui lòng thực hiện tuyến đường đó.

Tôi làm cách nào để chỉnh sửa nó để tôi có thể có .OrderBy ("tên cột") tức là theo thứ tự bảng chữ cái theo tên màu, vậy nên tên thuộc tính?

tôi tiếp tục nhận được một tin nhắn:

Những lập luận kiểu không thể được suy ra từ việc sử dụng. Thử xác định rõ các đối số kiểu.

Trả lời

148

Các biệt() được sẽ gặp rắc rối trật tự, vì vậy bạn sẽ cần phải phân loại sau đó .

var uniqueColors = 
       (from dbo in database.MainTable 
       where dbo.Property == true 
       select dbo.Color.Name).Distinct().OrderBy(name=>name); 
+3

Cảm ơn, đây là câu trả lời đúng. Ai đó có thể vui lòng giải thích những gì diễn ra trong tham số .OrderBy(). Bạn có tên => tên. Tên đó có xuất phát từ tên cột trong DB không? Bởi vì chúng ta có 'dbo.Color.Name' rồi chỉ cần' name => name' gợi ý cho tôi nó không phải là tên cột? Kỳ lạ nó cũng sắp xếp đúng nếu tôi chỉ thay đổi thành '.OrderBy (a => a)' – baron

+3

Tên của biến không liên quan. Nó chỉ {object được truyền vào hàm} => {object được sử dụng để sắp xếp}. Vì chúng ta đã chọn xong, thứ duy nhất trong bộ sưu tập đang được sắp xếp là tên. –

+0

Cảm ơn @JamesCurran, giải pháp của bạn đã giúp tôi rất nhiều. – Ron

19
var uniqueColors = (from dbo in database.MainTable 
        where dbo.Property == true 
        select dbo.Color.Name).Distinct(); 
+2

+1 nhưng tôi khuyên bạn nên sử dụng khối mã cho mã của bạn –

10

Sử dụng cú pháp truy vấn hiểu bạn có thể đạt được orderby như sau:

var uniqueColors = (from dbo in database.MainTable 
        where dbo.Property 
        orderby dbo.Color.Name ascending 
        select dbo.Color.Name).Distinct(); 
+0

Hmm ... không đạt được loại chữ cái - vì lý do nào đó ... Tôi đã chuyển sang tăng dần và giảm dần và nhận được kết quả tương tự. Tuyên bố khác biệt có ảnh hưởng đến nó không? có lẽ nó cần phải được orderby sau đó? – baron

+0

Có thể thử var uniqueColors = from result in (from dbo in database.MainTable nơi dbo.Property chọn dbo.Color.Name) .Distinct() orderby result ascending; – cordialgerm

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