GroupBy, Entity Framework Core 2.1 Önizleme 1’de hala çalışmıyor

Womanne

Member
gibi toplu işleçler minimum(), Maksimum(), toplam() VE Ortalama() çalış ama hayır saymak().


Entity Framework Core’un büyük bir zayıflığı olduğunu defalarca belirtmiştim, LINQ operatörü Gruplandır() muhabirde değil GRUPLANDIRMAYA GÖRE SQL’de, ancak tüm veri kümelerini RAM’e yüklemek ve orada gruplandırmak için (Entity Framework Core 1.0/1.1 ve Entity Framework Core 2.0 hakkındaki gönderime bakın).

Üç hafta önce yayınlanan Entity Framework Core 2.1’in ilk önizleme sürümü için Microsoft şunları belgeledi: “Artık en yaygın durumlarda SQL GROUP BY yan tümcesindeki çeviriyi destekliyoruz.”

Test senaryolarımı yeni çalıştırdım ve ilk vakayla hayal kırıklığına uğradım. Dıştan

// Simple Group by (Number of flights per destination)

var groups = (from p in ctx.FlightSet
group p by p.Departure into g
select new { City = g.Key,
Count = g.Count() })
.Where(x => x.Count > 5).OrderBy(x => x.Count).ToList();

Entity Framework Core, geçersiz olan bu SQL’i üretir:

SELECT [p].[Departure], COUNT(*)
FROM [Flight] AS [p]
WHERE COUNT(*) > 5
GROUP BY [p].[Departure]


çünkü: “Bir HAVING yan tümcesinde veya bir seçim listesinde yer alan bir alt sorguda olmadıkça ve toplanacak sütun bir dış referans olmadıkça, bir toplama WHERE yan tümcesinde görünmeyebilir.”

Hata bu gibi görünüyor saymakAsmak için operatör. gibi diğer toplama operatörleri minimum(), Maksimum(), toplam() VE Ortalama() işlev. Bu LINQ sorgusu:

// Simple Group by: Min, Max, Sum und Average of FreeSeats per Destination
var groups = (from p in ctx.FlightSet
group p by p.Departure into g
select new { City = g.Key, Min = g.Min(x => x.FreeSeats),
Max = g.Max(x => x.FreeSeats),
Sum = g.Sum(x => x.FreeSeats),
Avg = g.Average(x => x.FreeSeats) });

Entity Framework Core 2.1 Önizleme 1’de düzeltilen bu SQL ile sonuçlanır:

SELECT [p].[Departure], MIN([p].[FreeSeats]), MAX([p].[FreeSeats]),
SUM([p].[FreeSeats]), AVG(CAST([p].[FreeSeats] AS float))
FROM [Flight] AS [p]
GROUP BY [p].[Departure]

Github’a bir hata raporu gönderdim.

Entity Framework Core ile ilgili bir sonraki sunumum 11 Nisan 2018’de Magdeburg Geliştirici Günleri’nde olacak. Umarım Count() öğesinin de “yaygın bir durum” olduğunu belirtebilirim.


()



Haberin Sonu
 
Üst