2010-06-22 21 views

Trả lời

6

Không, chúng không, nếu chúng được gọi chính xác trên IQueryable thay vì IEnumerable, chúng được biên dịch dưới dạng biểu thức và sau đó sẽ được dịch sang SQL.

Bạn có thể sử dụng chú giải công cụ intellisense để xem phương thức nào sẽ được gọi hiện tại. Nếu tham số đầu tiên của phương pháp mở rộng là IEnumerable thay vì IQueryable, bạn sẽ chạy vào truy vấn cơ sở dữ liệu.

+1

Bạn có chắc chắn gọi GroupBy trên một IEnumerable thay vì một IQueryable sẽ làm cho truy vấn được gửi đến cơ sở dữ liệu? Tôi nghĩ rằng đó là chỉ khi bạn bắt đầu liệt kê rằng truy vấn được gửi đi. –

0

Không, gọi Chọn() và GroupBy() sẽ không nhấn vào cơ sở dữ liệu. Chỉ khi kết quả thực tế được yêu cầu (khi liệt kê, sử dụng ToList(), ToArray(), Count() v.v) sẽ truy vấn được thực hiện đối với cơ sở dữ liệu.

1

Không, Select, GroupBy và hầu hết các phương pháp khác sẽ không gây ra yêu cầu cơ sở dữ liệu. Một yêu cầu cơ sở dữ liệu thường sẽ chỉ được thực hiện khi bạn làm điều gì đó yêu cầu kết quả được biết đến, chẳng hạn như gọi Count hoặc ToList như bạn đã đề cập.

Để giúp bạn biết khi nào truy vấn cơ sở dữ liệu được thực hiện, có thể giúp bạn đăng nhập. Sau đó, khi bạn duyệt qua mã, bạn có thể thấy khi nào truy vấn được gửi.

+0

Cảm ơn lời khuyên, nhưng tôi không nghĩ rằng tôi có thể nhìn thấy một hoạt động Đăng nhập LINQ-to-thực thể ... – user169867

+0

Bạn có lẽ có thể xem câu hỏi này và câu trả lời của nó: http://stackoverflow.com/questions/137712/sql-tracing-linq-to-entity –

Các vấn đề liên quan