2012-04-05 41 views
5

Trong một chuỗi dựa quá tải của Include chúng tôi chỉ định để bao gồm một bộ sưu tập và sau đó một tham chiếu một mức độ xuống chỉ đơn giản bằng cách xác định các đặc tính chuyển hướng có liên quan theo đúng thứ tự:Bao gồm sử dụng Lambda biểu

query.Include("Level1Collection.Level2Reference"); 

Nhưng tại sao khi sử dụng quá tải của Include có sử dụng biểu thức lambda, chúng ta cũng phải sử dụng một tuyên bố Select để có thể xác định các truy vấn trên:

query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Reference)). 

Tại sao không phải là công việc sau đây:

012.
query.Include.(e => e.Level1Collection.Level2Reference) 

cảm ơn bạn

Trả lời

7

Bởi vì trình biên dịch không nhận ra rằng bối cảnh đã thay đổi ý nghĩa của tài sản bộ sưu tập từ một bộ sưu tập để trở thành một stand-in cho các đối tượng trong bộ sưu tập. Và kể từ khi trình biên dịch không thay đổi dựa trên ngữ cảnh, không phải là intellisense.

Khi bạn nạp một câu lệnh chuỗi, nó biết rằng nó phải sử dụng sự phản chiếu để biết những thuộc tính nào sẽ được bao gồm và không có kiểu kiểm tra biên dịch. Phương thức cơ bản biết rằng khi nó thấy một dấu chấm sau một thuộc tính collection trong chuỗi nó sẽ phân tích cú pháp các thuộc tính của các đối tượng bên trong bộ sưu tập cho thuộc tính được tham chiếu tiếp theo chứ không phải chính bộ sưu tập ("Level2Reference" trong trường hợp này).

Hay nói cách khác: đó là phép thuật. :)

+0

có ý nghĩa. – user702769

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