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

  • Ash100HD

    Ash100HD

    29 EKİM 2011
  • Dive In

    Dive In

    17 Temmuz 2013
  • TastyTuts | Creative video tutorials by Gareth David

    TastyTuts |

    6 Temmuz 2011