ฉันกำลังทำงานใน Entity Framework Core 1.1.0 (และการอัปเกรดไม่ใช่ตัวเลือกในตอนนี้ เนื่องจากการเปลี่ยนแปลงที่ไม่สมบูรณ์ในเวอร์ชันที่ใหม่กว่า) คำถามของฉันอยู่ในรูปแบบต่อไปนี้:
var q = db.MyTable
.GroupBy(t => new { t.Field1 })
.Select(g => new
{
g.Key.Field1,
MaxField2 = g.Max(x => x.Field2)
})
.ToList();
ในโค้ดทดสอบสิ่งนี้ทำงานได้ดีและส่งคืนข้อมูลที่คาดหวัง แต่เมื่อปรับใช้ในสภาพแวดล้อมจริงด้วยข้อมูลจริง ระบบจะหมดเวลา ทำไม ฉันลองดมกลิ่นบนเซิร์ฟเวอร์ SQL และนี่คือ SQL จริง:
SELECT [t].[Field1], [t].[Field2], [t].[Field3], [t].[Field4], [t].[Field5]
FROM [dbo].[MyTable] AS [t]
ORDER BY [t].[Field1]
โอ้. นั่นสิจะอธิบายได้ EF รวบรวมเฉพาะแบบสอบถามจนถึง .GroupBy()
ลงใน SQL ดังนั้นพยายามโหลดเนื้อหา ทั้งหมด ของตาราง (ประมาณ 17 ล้านบันทึกในขณะที่เขียนนี้) ลงในหน่วยความจำ และส่วนที่เหลือของการจัดกลุ่ม และการสั่งซื้อควรจะทำในความทรงจำ
ข้อเสนอแนะใด ๆ เกี่ยวกับวิธีการแก้ไขแบบสอบถามนี้เพื่อให้การยกของหนักเสร็จสิ้นใน SQL
Expression<Func<>>
และทำงานกับตัวแปรเหล่านั้น ฉันไม่คิดว่าจะมีใครต้องการสร้างโครงสร้าง DB ของคุณใหม่ตั้งแต่ต้น ทำงานร่วมกับ EF Core เวอร์ชันเก่า และแก้ไขข้อบกพร่องนี้ให้กับคุณโดยสมบูรณ์ - person Matthias Burger   schedule 19.07.2017Sum
:) - person Ivan Stoev   schedule 19.07.2017