2015-06-05 14 views
9

Trong LINQ to Entity, .AsExpandable() chính xác làm gì? Ở đâu và tại sao sử dụng nó? Nó có bao gồm tất cả các thực thể liên quan vào truy vấn để tải chậm không?.AsExpandable trong LINQ to Entity

+2

'AsExpandable' không được tích hợp trong Ling funciotn. Nếu bạn đang nói về phương pháp mở rộng từ [LinqKit] (http://www.albahari.com/nutshell/linqkit.aspx) thì hãy đọc phần thuyên tắc tài liệu cũng như [blog] (http://tomasp.net) /blog/linq-expand.aspx/) được dựa trên đó. –

+0

Cảm ơn một tấn. Nó đã giúp đỡ. –

Trả lời

9

"đường ống xử lý truy vấn Entity Framework không thể xử lý các biểu gọi, đó là lý do tại sao bạn cần phải gọi AsExpandable trên đối tượng đầu tiên trong truy vấn. Bằng cách gọi AsExpandable, bạn kích hoạt lớp người truy cập biểu LINQKit của mà thay thế biểu thức gọi với cấu trúc đơn giản hơn mà Entity Framework có thể hiểu được. " ~ Josef Albahary

Để biết thêm chi tiết tôi sẽ khuyên bạn nên đọc từ author of LinqPad

1

Không có chuyển đổi ngầm từ một nhóm phương pháp để một Expression (của một loại đại biểu tương ứng). Có một chuyển đổi tiềm ẩn từ một nhóm phương thức thành một đại biểu của một chữ ký phù hợp. Do đó chỉ có các kết quả quá tải IEnumerable.

Tất nhiên, điều đó không có nghĩa là bạn cần sử dụng lambda. Chỉ cần viết:

ctx.Set(). AsExpandable(). Where (ByName); Vì bạn đang đi qua một biểu thức (ByName là, sau khi tất cả, một Expression đã, đó là chính xác những gì Queryable.Where yêu cầu) điều này sẽ đánh giá như một truy vấn, không phải trong LINQ cho các đối tượng.