Bu SQL
ifadeyi bir Linq-Entity
sorguya çevirmem gerekiyor ...
SELECT name, count(name) FROM people
GROUP by name
Bu SQL
ifadeyi bir Linq-Entity
sorguya çevirmem gerekiyor ...
SELECT name, count(name) FROM people
GROUP by name
Yanıtlar:
Ancak her zaman konsol / günlükte mesajlara dikkat edin. Sorgunuzun SQL'e dönüştürülemediğine ve yerel olarak değerlendirileceğine dair bir bildirim görürseniz, yeniden yazmanız gerekebilir.
Entity Framework 7 (artık Entity Framework Core 1.0 / 2.0 olarak yeniden adlandırılmıştır ) henüz oluşturulan SQL'de GroupBy()
çeviri için destek sağlamamaktadır GROUP BY
(son 1.0 sürümünde bile desteklemeyecektir). Herhangi bir gruplama mantığı istemci tarafında çalışacak ve bu da çok fazla verinin yüklenmesine neden olabilir.
Sonunda bu şekilde yazılan kod otomatik olarak GROUP BY kullanmaya başlayacaktır, ancak şimdilik tüm gruplanmamış veri kümenizi belleğe yüklemek performans sorunlarına neden olacaksa çok dikkatli olmanız gerekir.
Bunun bir anlaşma bozucu olduğu senaryolar için SQL'i elle yazmanız ve EF aracılığıyla yürütmeniz gerekir.
Şüpheniz varsa, Sql Profiler'ı çalıştırın ve neyin üretildiğini görün - muhtemelen yine de yapıyor olmalısınız.
https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-entity-framework-core-rc2
Yararlı bir uzantı, sonuçları Dictionary
hızlı bir aramada toplamaktır (örneğin bir döngüde):
var resultDict = _dbContext.Projects
.Where(p => p.Status == ProjectStatus.Active)
.GroupBy(f => f.Country)
.Select(g => new { country = g.Key, count = g.Count() })
.ToDictionary(k => k.country, i => i.count);
İlk olarak burada bulundu: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c
İşte .net çekirdek 2.1'deki basit bir grup örneği
var query = this.DbContext.Notifications.
Where(n=> n.Sent == false).
GroupBy(n => new { n.AppUserId })
.Select(g => new { AppUserId = g.Key, Count = g.Count() });
var query2 = from n in this.DbContext.Notifications
where n.Sent == false
group n by n.AppUserId into g
select new { id = g.Key, Count = g.Count()};
Hangisi şu anlama gelir:
SELECT [n].[AppUserId], COUNT(*) AS [Count]
FROM [Notifications] AS [n]
WHERE [n].[Sent] = 0
GROUP BY [n].[AppUserId]
EF 6.2 ile benim için çalıştı
var query = context.People
.GroupBy(p => new {p.name})
.Select(g => new { name = g.Key.name, count = g.Count() });