2010-08-19 14 views
89

Bu gibi bir liste var: LINQ ile BENZERSİZ SELECT nasıl yapabilirim?

Red 
Red 
Brown 
Yellow 
Green 
Green 
Brown 
Red 
Orange 

LINQ ile SELECT UNIQUE yapmaya çalışıyorum, yani

Red 
Brown 
Yellow 
Green 
Orange 

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

istiyorum ve bunu

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

olarak değiştirdim başarısı. İlk select renkleri TÜMÜNÜ alır, bu yüzden sadece benzersiz değerleri elde etmek için nasıl değiştirebilirim?

Bu sorguyu yapılandırmanın daha iyi bir yolu varsa, o rotaya gitmek için çok mutlu.

Düzenleme hakkında nasıl giderim? OrderBy ("sütun adı"), yani renk adına göre alfabetik olarak, yani isim özelliği?

Bir ileti almaya devam ediyorum:

Tür bağımsız değişkenleri kullanımdan çıkarılamıyor. Tip argümanlarını açıkça belirtmeyi deneyin.

cevap

148

) (Farklı karmaşa kadar sipariş gidiyor ondan sonra sıralamaya gerekecek böylece, .

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

Teşekkürler, bu doğru cevap. Birisi lütfen .OrderBy() parametrelerinde ne olduğunu açıklayabilir. İsim => adınız var. Bu isim DB'deki sütun adından mı geliyor? Çünkü dbo.Color.Name' diye bir isim var, o zaman sadece 'name => name' bana bir ipucu veriyor. Tuhaf olarak, eğer onu sadece '.OrderBy (a => a)' – baron

+3

olarak değiştirirsem düzgün şekilde sıralar. Değişkenin adı alakasız. Sadece {object işlevine geçirildi} => {sıralamak için kullanılan nesne}. Seçimi daha önce yaptığımız için, koleksiyonda yer alan tek şey isimler. –

+0

Teşekkürler @JamesCurran, çözümünüz bana çok yardımcı oldu. – Ron

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

+1 ama alfabetik sıralama elde etmedi Kodunuzdaki –

10

şöyle OrderBy elde edebiliriz sorgu anlama sözdizimi kullanarak:

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

Hmm ... için bir kod bloğu kullanmak önermek - nedense ... Ben artan ve azalan açık ve aynı sonucu aldık. Bunu etkileyen farklı bir ifade var mı? belki bundan sonra sipariş edilmeli mi? – baron

+0

içinde sonucundan var uniqueColors = deneyin olabilir .Distinct() orderby sonucu artan (dbo.Property dbo.Color.Name seçmek database.MainTable içinde dbo itibaren); – cordialgerm