2011-09-28 35 views
5

Tôi muốn thực thi một sql thô bằng cách sử dụng DBContext SqlQuery và sau đó bao gồm các entites liên quan. Tôi đã thử những điều sau nhưng không tải các thực thể liên quan:EF 4.1 - DBContext SqlQuery và Bao gồm

string sql = "Select * from client where id in (select id from activeclient)"; 
var list = DbContext.Database.SqlQuery<Client>(sql).AsQueryable().Include(c => c.Address).Include(c => c.Contactinfo).ToList(); 

Bất kỳ trợ giúp nào?

Trả lời

5

Nó không phải là tốt. Include chỉ hoạt động với ESQL hoặc linq-to-entity vì nó phải được xử lý trong quá trình xây dựng truy vấn để xây dựng truy vấn SQL đúng. Bạn không thể chuyển truy vấn SQL đến cơ chế xây dựng này. Hơn nữa mã của bạn sẽ dẫn đến việc thực hiện truy vấn SQL như hiện tại và đang cố gắng gọi Include về liệt kê kết quả.

Bạn cũng có thể sử dụng truy vấn LINQ đơn giản để có được kết quả của bạn:

var query = from c in context.Clients.Include(c => c.Address).Include(c => c.Contactinfo) 
      join ac in context.ActiveClients on c.Id equals ac.Id 
      select c; 

này nên sản xuất bên tham gia trong SQL và do đó bộ lọc là khách hàng không hoạt động.

1

Không trả lời trực tiếp, nhưng thay vì viết truy vấn sql liệu bạn có thể sử dụng một cái gì đó như thế này

_conext.Clients.Where(c => _conext.ActiveClients.Any(a => a.ClientId == c.Id)); 
Các vấn đề liên quan