SORU
28 Ocak 2009, ÇARŞAMBA


Seri belirli bir Özelliğin Farklı

Ben oynarken Etmeniz öğrenmek ile ilgili ama çözemedim nasıl kullanılacağını Farklı zaman değilim basit bir liste (basit bir liste tamsayılar oldukça kolay, bu değil soru). Eğer nesnenin BİR veya DAHA fazla Özellikleri bir Nesne listesi Distinct kullanmak için ne yapmalıyım?

Eğer bir nesne Özelliği Id Person,. örnek: Nasıl tüm Kişi ve özelliği ile Distinct nesne Id miyim?

Person1: Id=1, Name="Test1"
Person2: Id=1, Name="Test1"
Person3: Id=2, Name="Test2"

Nasıl Person1 ve Person3 alabilir miyim? Bu mümkün mü?

Eğer Etmeniz ile mümkün değilse, ne Person listesi bazı Özelliklerini bağlı olarak, en iyi yolu olurdu .Net 3.5?

CEVAP
28 Ocak 2009, ÇARŞAMBA


EDİTBu şimdi MoreLINQ parçası.

İhtiyacın olan şey "farklı" etkili olur. Bunu yazmak kolay olsa da: anlamı olarak SERİ bir parçası olduğuna inanmıyorum

public static IEnumerable<TSource> DistinctBy<TSource, TKey>
    (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
    HashSet<TKey> seenKeys = new HashSet<TKey>();
    foreach (TSource element in source)
    {
        if (seenKeys.Add(keySelector(element)))
        {
            yield return element;
        }
    }
}

Çok farklı değerleri Id sadece özelliğini kullanarak bulmak için kullanabilirsiniz:

var query = people.DistinctBy(p => p.Id);

Ve birden fazla özelliklerini kullanmak için, eşitlik uygun şekilde uygulamak anonim türleri kullanabilirsiniz:

var query = people.DistinctBy(p => new { p.Id, p.Name });

Denenmemiş, ama çalışması gerekir (ve şimdi en azından derler).

Eğer bir eşitlik karşılaştırıcısı geçişte, sadece HashSet kurucu devretmek istiyorsanız anahtarları için varsayılan karşılaştırıcısı olsa varsayar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • A Alkhaldi

    A Alkhaldi

    12 Mayıs 2007
  • MandMEvangelists

    MandMEvangel

    28 Ocak 2008
  • tychoadragmire

    tychoadragmi

    20 Mart 2006