LINQ ile BENZERSİZ SEÇİMİ nasıl yapabilirim?


96

Bunun gibi bir listem var:

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;

Sonra bunu olarak değiştirdim

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

Başarısız. İlki selectTÜM renkleri alır, peki sadece benzersiz değerleri elde etmek için onu nasıl değiştirebilirim?

Bu sorguyu yapılandırmanın daha iyi bir yolu varsa, o yola gitmekten çok mutlu olur.

.OrderBy( "column name" )Örneğin, renk adına göre alfabetik olarak sahip olabilmem için düzenlemeye nasıl devam edebilirim, yani özellik adı?

Bir mesaj alıyorum:

Tür bağımsız değişkenleri kullanımdan çıkarılamaz. Tür bağımsız değişkenlerini açıkça belirtmeyi deneyin.

Yanıtlar:


159

Distinct()Ondan sonra sıralama gerekecek, böylece sipariş kadar karışıklık gidiyor.

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 neler olduğunu açıklayabilir mi? Adınız => adınız var. Bu ad DB'deki sütun adından mı geliyor? Çünkü dbo.Color.Nameo zaman name=>namebana hangi ipuçlarını verdiğimiz için sütun adı değil mi? Tuhaf, şu şekilde değiştirirsem de düzgün .OrderBy(a=>a)
sıralıyor

3
Değişkenin adı ilgisizdir. Sadece {fonksiyona geçirilen nesne} => {sıralama için kullanılan nesne}. Seçimi zaten yaptığımız için, koleksiyonda sıralanan tek şey isimlerdir.
James Curran

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

Tüm nesne / kayda göre sipariş vermek için bir OrderedBy () olsaydı güzel olurdu gibi görünüyor. Bir uzatma yöntemi yine de sebepsiz yere bir temsilciyi çağırıyor olacaktır.
NetMage

@NetMage - "tüm nesne / kayıt" olarak ne demek istediğinizi netleştirin. Her alan mı? Hangi sırayla? Birincil anahtar dahil mi?
James Curran

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

10

Sorgu anlama sözdizimini kullanarak sıralamayı şu şekilde elde edebilirsiniz:

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

Hmm ... bu alfabetik bir sıralama elde edemedi - bazı nedenlerden dolayı ... Yükselen ve alçalan değiştim ve aynı sonucu aldım. Farklı ifade onu etkiliyor mu? belki bundan sonra sipariş edilmesi gerekiyor?
baron

(Dbo.Property dbo.Color.Name seçildiğinde) .Distinct () sırasına göre artan;
cordialgerm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.