Müşteri veritabanımı ülkeye göre sıralamak istiyorum. SQL ben yazardım:Varlık Çerçevesinde SQL'de RANK() işlevine çeviren bir işlev var mı?
select CountryID, CustomerCount = count(*),
[Rank] = RANK() over (order by count(*) desc)
from Customer
Şimdi Entity Framework bunu yazmak istiyorum: O çalışmıyor
- :
var ranks = db.Customers .GroupBy(c => c.CountryID) .OrderByDescending(g => g.Count()) .Select((g, index) => new {CountryID = g.Key, CustomerCount = g.Count, Rank = index+1});
bu iki sorun vardır. EF bir
System.NotSupportedException
; Açıkçası, satır numarasını kullanan overload of.Select()
için SQL çevirisi yoktur; Bu yöntemi çağırmak için her şeyi.ToList()
ile belleğe çekmek zorunda kalacaksınız; ve yöntemi yerel bellekte çalıştırsanız bile,RANK()
işlevinin SQL'de yaptığı gibi eşit sıralamayı işlemez, yani eşit bir sıraya sahip olmalı ve ardından aşağıdaki öğe orijinal sırasına atlar.
Peki bunu nasıl yapmalıyım?
AKAIK Rank() LINQ içinde yerleşik bir işlevi yoktur. Bu cevap yaklaşımınızı kullanır, ancak onlar için işe yaramaktadır: http://stackoverflow.com/a/21035060/7720 veya bu sorunun birkaç seçeneği vardır. – Romias
@Romias, sorunumu çözen [bu yanıtı] (http://stackoverflow.com/a/10705535/7850) bulmak için beni yola koydu. Buraya bir cevap olarak yazmaktan çekinmeyin, böylece size kredi verebilirim! –
Sevindim sana yardımcı ol ... Yorumu cevabını koyuyorum! Teşekkürler! – Romias