Truy vấn Aggregate
của VB.NET có thiếu sót khi được sử dụng như mệnh đề đầu tiên (bên ngoài) của biểu thức LINQ với nhiều mệnh đề Into
vì mỗi mệnh đề Into
được thực hiện riêng biệt không?Tổng hợp có bị thiếu sót nghiêm trọng do mỗi mệnh đề vào được thực hiện riêng biệt không?
Câu trả lời "dễ thấy" đối SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant
in LINQ to SQL là
Dim limits = Aggregate p In Plants Select p.ZoneMin Into Min(), Max()
Tuy nhiên, câu trả lời này thực sự lấy mỗi Min
và Max
(và nếu bạn bao gồm chức năng tổng hợp khác như Count
và Average
) trong truy vấn SQL riêng . Điều này có thể dễ dàng nhìn thấy trong LINQPad.
Có giao dịch nào (hoặc điều gì khác khiến cho các truy vấn này nguyên tử) không được hiển thị bởi LINQPad hay đây là tình trạng chạy đua đang chờ xảy ra? (Và vì vậy bạn phải thực hiện các thủ thuật được hiển thị trong câu trả lời cho câu hỏi trên để buộc một truy vấn trả về nhiều tập hợp.)
Tóm lại, có truy vấn LINQ to SQL sử dụng Aggregate
trả về nhiều tập hợp trong một truy vấn đơn (hoặc ít nhất là "nguyên tử")?
(Tôi cũng nói "rõ ràng" vì câu trả lời rõ ràng với tôi, Aggregate p In Plants Into Min(p.ZoneMin), Max(p.ZoneMin)
, thực sự lấy toàn bộ bảng hai lần, ngay cả khi được tối ưu hóa, và sau đó sử dụng LINQ-to-Entities Min
và Max
để có được kết quả: -()
tôi nghĩ Aggregate
không VB cụ thể, nhưng có vẻ như C# không có biểu thức truy vấn này, vì vậy tôi đã thay đổi .net để vb.net
Bạn có thể xác minh xem các truy vấn có trong giao dịch hay không bằng cách truy tìm máy chủ SQL, nó sẽ hiển thị nó (nhưng tôi không chắc chắn 100% về nó). Tuy nhiên, nếu hiệu suất không phải là mối quan tâm chính, bạn nên đọc toàn bộ tập dữ liệu và tổng hợp sau đó (về cơ bản, làm việc trên ảnh chụp nhanh của dữ liệu). – Alex
Lưu ý rằng đó là những gì tôi hy vọng truy vấn 'Into Min (p.ZoneMin)' ban đầu của tôi sẽ tối ưu hóa, khi phần SQL của truy vấn bây giờ giống nhau. Có lẽ JITter có thể vẫn thấy điều đó, nhưng LINQPad's/o + thì không. –
Và trong khi bạn chỉ tổng hợp với các hàm SQL hỗ trợ nó sẽ thích hợp hơn để thực hiện "nhóm theo một thủ thuật liên tục" để có được cơ sở dữ liệu để thực hiện tập hợp. –