Tôi có một giải pháp mà tôi đã tạo các thực thể theo dõi tự sử dụng các mẫu RTM. Tôi đã chia các thực thể và bối cảnh giữa 2 dự án để tôi có thể tái sử dụng các định nghĩa kiểu như tôi định chạy máy khách/máy chủ thông qua WCF.Entity Framework 4: Eager Loading (Bao gồm) với các bộ lọc sử dụng Self Tracking Entities
Một trong các phương thức dịch vụ của tôi là bắt buộc để trả về biểu đồ các đối tượng "Sản phẩm" với các đối tượng con của "ProductSku" và các đối tượng này có đối tượng con là "ProductPrice". Tiêu chí lựa chọn sẽ nằm trên thuộc tính "Tên" của đối tượng "Sản phẩm" và thuộc tính "FinancialPeriodID" của "ProductPriceObject". Hiện tại, tôi không bao gồm tên trong tìm kiếm, nhưng tôi đang gặp vấn đề khi đưa biểu đồ trở lại.
Nếu tôi chỉ đơn giản là thực hiện các truy vấn sau đây (lưu ý, cú pháp này được lấy từ LinqPad chứ không phải là mã ứng dụng thực tế) ...
from product in Products.Include("Skus.PriceHistory")
select product
... sau đó tôi có thể lấy lại đồ thị đối tượng đầy đủ cho các mục mà tôi yêu cầu, tất nhiên vào thời điểm này không có bộ lọc.
Nếu thay vào đó, tôi giới thiệu các bộ lọc như sau ...
from product in Products.Include("Skus.PriceHistory")
join sku in ProductSkus on product.ID equals sku.ProductID
join price in ProductPrices on sku.ID equals price.ProductSkuID
where price.FinancialPeriodID == 244
select product
... những gì tôi đang mong đợi để có được trở lại là "sản phẩm" đối tượng, đứa trẻ "productSku" đối tượng (mà là ở bộ sưu tập "Skus" của "Product") và đối tượng "ProductPrice" của chúng (nằm trong bộ sưu tập "PriceHistory" của "ProductSku") - nhưng tôi chỉ lấy lại đối tượng "Product", bộ sưu tập "Skus" là trống.
Tôi cũng đã thử mã hóa các truy vấn như ...
from product in Products.Include("Skus.PriceHistory")
from sku in product.Skus
from price in sku.PriceHistory
where price.FinancialPeriodID == 244
select product
... nhưng điều này làm cho không có sự khác biệt trong hai.
Rõ ràng, tôi phải làm điều gì đó sai. Ai đó có thể làm sáng tỏ điều gì đó giống như tôi đã từng làm việc này trong một vài giờ đồng hồ đi vòng quanh!
Xin lỗi, "SKU" và "PriceHistory" đều các bộ sưu tập, vì vậy nó không thể điều hướng tất cả các con đường xuống đường dẫn trong một câu lệnh duy nhất. Tôi lo sợ không có tùy chọn nào khác ngoài việc bao gồm các phép nối bằng cách sử dụng hoặc kết nối hoặc từ như được hiển thị trong hai ví dụ. Cảm ơn mọi người. –
Điều này có thể đã không giúp @MartinRobins, nhưng nó đã giúp tôi trong dự án của riêng tôi! 1 Cú pháp này làm việc cho tôi (có lẽ là thiết lập hoàn toàn khác với câu hỏi ban đầu, tôi không biết ...) – BenSwayne