Tôi đang xây dựng các vị từ sử dụng lớp PrediateBuilder LinqKit của để tự động lọc cài đặt và Tôi muốn kết hợp một lồng khác.làm tổ PredicateBuilder predicates: f 'Tham số '' đã không bị ràng buộc trong LINQ định to Entities truy vấn biểu hiện'
Tôi đã đọc này (http://www.albahari.com/nutshell/predicatebuilder.aspx):
Đây là mã của tôi:
// The main predicate.
var mainPredicate = PredicateBuilder.True<Document>();
// ... some other conditions to the main predicate here ...
// The inner predicate (combined conditions using OR).
var innerPredicate = PredicateBuilder.False<Document>();
foreach (var period in periods)
{
var p = period;
innerPredicate =
innerPredicate.Or(
d =>
(d.Date >= p.DateFrom && d.Date <= p.DateTo));
}
mainPredicate = mainPredicate.And(innerPredicate);
documents = this.ObjectSet.AsExpandable().Where(mainPredicate).ToList();
tôi kết hợp hai vị từ của tôi giống như nó được giải thích trong tài liệu. Tuy nhiên, tôi nhận được ngoại lệ này:
Tham số 'f' không bị ràng buộc trong LINQ định to Entities biểu thức truy vấn
đầu tiên tôi nghĩ rằng vị bên trong phải được mở rộng trước khi kết hợp nó với vị chính, vì vậy tôi đã thay đổi mã kết hợp của tôi thêm một cuộc gọi đến phương pháp vị bên trong của Expand
như thế này:
mainPredicate = mainPredicate.And(innerPredicate.Expand());
Nhưng tôi nhận được cũ hành động ngoại lệ tương tự.
Sự khác biệt duy nhất trong mã của tôi so với tài liệu là tôi tự động tạo thuộc tính lồng nhau bằng cách sử dụng vòng lặp foreach
. Tôi chỉ không biết làm thế nào nó có thể ảnh hưởng xấu đến biểu thức kết quả.
Điều gì sai với mã của tôi?
Tôi thực sự có thể gỡ lỗi điều này bằng cách nào?
Trường hợp thông số f xuất phát từ đâu? Nó được tạo ra như thế nào? Tại sao nó lại có vấn đề trong trường hợp của tôi?
Có một số loại visualizer cây biểu thức của một số loại có thể giúp tôi thực sự thấy có gì sai với biểu thức kết quả không? Bởi vì cơ thể của biểu cảm khó đọc.
Nhìn vào [câu hỏi này] (http://stackoverflow.com/questions/2947820/c-sharp-predicatebuilder-entities-the-parameter-f-was-not-bound-in-the-specif) nó xuất hiện bạn có thể phải sử dụng 'Mở rộng()' bên trong 'Hoặc' của' innerPredicate' cũng như – jszigeti
Tôi đã thử nó. Tôi nhận được cùng một ngoại lệ. –