SORU
23 Aralık 2008, Salı


artan/SERİ içinde azalan bir parametre üzerinden sırasını değiştirebilir mi?

Parametre olarak verilen bir yöntem var "bool sortAscending". Şimdi SERİ sıralı Listesi Bu parametre bağlı olarak oluşturmak için kullanmak istiyorum. Sonra bu var:

var ascendingQuery = from data in dataList
                      orderby data.Property ascending
                      select data;

var descendingQuery = from data in dataList
                      orderby data.Property descending
                      select data;

Gördüğünüz gibi, her iki sorgu tek fark "" olabilir."". artan azalan Her iki sorguları birleştirmek istiyorum, ama nasıl bilmiyorum. Kimseye cevap var mı?

CEVAP
23 Aralık 2008, Salı


Kolayca IEnumerable veya IQueryable kendi uzantısı yöntemi oluşturabilirsiniz:

public static IOrderedEnumerable<TSource> OrderByWithDirection<TSource,TKey>
    (this IEnumerable<TSource> source,
     Func<TSource, TKey> keySelector,
     bool descending)
{
    return descending ? source.OrderByDescending(keySelector)
                      : source.OrderBy(keySelector);
}

public static IOrderedQueryable<TSource> OrderByWithDirection<TSource,TKey>
    (this IQueryable<TSource> source,
     Expression<Func<TSource, TKey>> keySelector,
     bool descending)
{
    return descending ? source.OrderByDescending(keySelector)
                      : source.OrderBy(keySelector);
}

Evet, bir sorgu ifadesinde burada kullanma yeteneği kaybedersiniz ama açıkçası aslında bir sorgu ifadesinde bu durumda zaten sahip olduğunuzu sanmıyorum. Sorgu ifadeleri karmaşık şeyler için büyük, ama eğer sadece tek bir işlem yapıyoruz eğer sadece basit bir operasyon koymak için:

var query = dataList.OrderByWithDirection(x => x.Property, direction);

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • engineerguy

    engineerguy

    10 Ocak 2010
  • RocketJump

    RocketJump

    22 ŞUBAT 2006
  • Top Gear

    Top Gear

    27 Mart 2006