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.