Tôi có một bảng 200.000 bản ghi mà tôi chỉ nhận được 10 đầu trang sử dụng .Take()
nhưng mất khoảng 10 giây để lấy dữ liệu.LINQ đối với các thực thể rất chậm sử dụng phương thức .Take()
Câu hỏi của tôi là: phương pháp .Take()
lấy tất cả dữ liệu từ cơ sở dữ liệu và lọc 10 dữ liệu hàng đầu ở phía máy khách?
Đây là mã của tôi:
mylist = (from mytable in db.spdata().OrderByDescending(f => f.Weight)
group feed by mytable.id into g
select g.FirstOrDefault()).Take(10).ToList();
spdata()
là một chức năng nhập khẩu từ thủ tục lưu trữ.
Cảm ơn
Nếu bạn tò mò những gì nó chạy chống lại cơ sở dữ liệu, bạn nên treo một hồ sơ lên đến DB của bạn và kiểm tra nhật ký, đó là cách tốt nhất để tìm hiểu. – Chris
Nếu spdata() trả về 200.000 thì có, nó sẽ làm điều đó ở phía máy khách. –
Ngoài phương thức của Chris, bạn cũng có thể thử Linqpad và chuyển sang chế độ xem SQL sau khi viết truy vấn của bạn để xem SQL được tạo hoặc đặt điểm ngắt (với phương pháp này http://stackoverflow.com/questions/1412863/how -do-i-view-the-sql-tạo-by-the-thực thể-khuôn khổ) để xem những gì được tạo ra khi chương trình thực thi. –