SORU
3 EYLÜL 2011, CUMARTESİ


Varlıklar bu SERİ yöntemi Son tanımıyor. Gerçekten mi?

Bu sorguda:

    public static IEnumerable<IServerOnlineCharacter> GetUpdated()
    {
        var context = DataContext.GetDataContext();
        return context.ServerOnlineCharacters
            .OrderBy(p => p.ServerStatus.ServerDateTime)
            .GroupBy(p => p.RawName)
            .Select(p => p.Last());
    }

Bunun için çalışmak, bunun için geçmek zorunda kaldı

    public static IEnumerable<IServerOnlineCharacter> GetUpdated()
    {
        var context = DataContext.GetDataContext();
        return context.ServerOnlineCharacters
            .OrderByDescending(p => p.ServerStatus.ServerDateTime)
            .GroupBy(p => p.RawName)
            .Select(p => p.FirstOrDefault());
    }

Hatta ilk sorgu ayna p.First(), kullanamadım.

Aksi halde neden böylesine güçlü bir ORM sistemi ne böyle temel bir sınırlama var mı?

CEVAP
3 EYLÜL 2011, CUMARTESİ


Bu sınırlama, sonuçta bu sorgu çevirmek için var olduğu gerçeğini aşağı gelirSQLve SQL SELECT TOP (T-SQL) ama SELECT BOTTOM (böyle bir şey) vardır.

Bunu çözmenin kolay bir yolu da varazalanve o zaman ne yaptın ki First(),.

DÜZENLEME: Diğer sağlayıcıları muhtemelen büyük olasılıkla WHERE ROWNUM = 1 gibi bir şey daha olurdu Oracle SELECT TOP 1 farklı uygulamalar var

DÜZENLEME:

Daha az etkili bir alternatifBen bu tavsiye!- hemen o noktaya inşa edilmiş Varlıkları İfade ETMENİZ yürütecek olan, .Last() o zaman sen önce verilerinizi .ToList() aramak .() En son bu noktada .Last() etkili bir bağlamda yürütülmesi için çalışırNesneleri bu SERİİfade yerine. (Ve senin de belirttiğin gibi, binlerce kayıt geri getirmek ve asla alışacaklar CPU materialising nesneleri bir sürü atık olabilir)

Yine, bu ikinci yapmanızı tavsiye ediyorum, ancak ETMENİZ ifade yürütülecek olan arasındaki farkı göstermek yardımcı olur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 8lacKy

    8lacKy

    30 Mart 2009
  • The Exploiteers

    The Exploite

    4 Ocak 2011
  • Trevor Eckhart

    Trevor Eckha

    19 Aralık 2009