Saya perlu menerjemahkan SQL
pernyataan ini menjadi Linq-Entity
kueri ...
SELECT name, count(name) FROM people
GROUP by name
sumber
Saya perlu menerjemahkan SQL
pernyataan ini menjadi Linq-Entity
kueri ...
SELECT name, count(name) FROM people
GROUP by name
Sintaks kueri
var query = from p in context.People
group p by p.name into g
select new
{
name = g.Key,
count = g.Count()
};
Sintaks metode
var query = context.People
.GroupBy(p => p.name)
.Select(g => new { name = g.Key, count = g.Count() });
Tapi selalu perhatikan di konsol / log untuk pesan. Jika Anda melihat pemberitahuan bahwa kueri Anda tidak dapat dikonversi ke SQL dan akan dievaluasi secara lokal, Anda mungkin perlu menulis ulang.
Entity Framework 7 (sekarang berganti nama menjadi Entity Framework Core 1.0 / 2.0 ) belum mendukung GroupBy()
terjemahan ke GROUP BY
dalam SQL yang dihasilkan (bahkan di rilis 1.0 final itu tidak akan). Setiap logika pengelompokan akan berjalan di sisi klien, yang dapat menyebabkan banyak data dimuat.
Akhirnya kode yang ditulis seperti ini akan secara otomatis mulai menggunakan GROUP BY, tetapi untuk saat ini Anda harus sangat berhati-hati jika memuat seluruh kumpulan data yang tidak dikelompokkan ke dalam memori akan menyebabkan masalah kinerja.
Untuk skenario di mana ini adalah pemecah kesepakatan, Anda harus menulis SQL dengan tangan dan menjalankannya melalui EF.
Jika ragu, jalankan Sql Profiler dan lihat apa yang dihasilkan - yang mungkin harus Anda lakukan.
https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-entity-framework-core-rc2
Ekstensi yang berguna adalah mengumpulkan hasil
Dictionary
untuk pencarian cepat (misalnya dalam satu lingkaran):Awalnya ditemukan di sini: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c
sumber
Berikut adalah contoh sederhana dari group by in .net core 2.1
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()};
Yang diterjemahkan menjadi:
SELECT [n].[AppUserId], COUNT(*) AS [Count] FROM [Notifications] AS [n] WHERE [n].[Sent] = 0 GROUP BY [n].[AppUserId]
sumber
dengan EF 6.2 itu berhasil untuk saya
sumber