tôi tìm thấy những câu dưới đây có thể kết hợp nhiều Expression<Func<T,bool>>
biểu thức đó:Kết hợp OrderBy Biểu hiện với Expression
How to merge two C# Lambda Expressions without an invoke?
Tôi đang tự hỏi liệu, sử dụng một kỹ thuật tương tự, làm thế nào để bạn đi về việc sáp nhập một .OrderBy Expression<Func<Entity, Key>>
với .Where Expression<Func<Entity, bool>>
thành một Biểu thức loại hoặc kế thừa từ loại, System.Linq.Expressions.Expression
.
Tôi đang thực sự cắt lớp QueryProvider theo phong cách để lấy T => T == ...
Func thông qua các phương thức công khai .Where
và .OrderBy
. Điều này là với ý định rằng biểu thức lớp này được xây dựng sẽ được truyền cho QueryTranslator để tạo ra SQL phù hợp.
Trình theo dõi truy vấn của kiểu này, khi được gọi từ QueryProvider, thường lấy một đối số mà sau đó chuyển thành SQL.
Tôi có thể theo dõi và hiểu câu hỏi trên để hợp nhất hai số .Where
Funcs. Các bài viết trên blog sau đây là đặc biệt hữu ích cho việc này, và tôi bắt nguồn từ thông qua mỗi trong những ví dụ:
http://blogs.msdn.com/b/meek/archive/2008/05/02/linq-to-entities-combining-predicates.aspx
bài viết CodeProject Đây cũng là hữu ích:
http://www.codeproject.com/Articles/24255/Exploring-Lambda-Expression-in-C
Khi kết hợp một .OrderBy Func với .Where Func, tuy nhiên hai đối số chung khác nhau. Trong trường hợp của .Where đó là Func<Entity, bool>
và trong trường hợp của .OrderBy là Func<Entity, Key>
.
Hợp nhất hai Biểu thức này, trên bề mặt, không thẳng về phía trước khi hợp nhất hai với cùng một đối số chung chung.
Động cơ sản xuất Func-Expression được xây dựng (không chắc chắn về thuật ngữ chính xác) có thể kết hợp một .Where Func với một .OrderBy Func. Tôi tò mò về những gì diễn ra dưới mui xe khi hai biểu thức này được hợp nhất để trở thành một System.Linq.Expressions.Expression
. Có thể, và nếu như vậy, bạn sẽ làm thế nào để kết hợp một Expression<Func<Entity, bool>>
với một số Expression<Func<Entity,Key>>
giả định thực thể là cùng loại trong mỗi biểu thức?
Biểu thức kết quả trông như thế nào? – dtb
Nó phải giống như một .Where (T => T.Name == "Cooper"). OrderBy (T => T.DateOfBirth) – Anthony
Bạn hợp nhất '.Where (x => condition1) .Where (x = > condition2) 'to' .Where (x => condition1 && condition) 'nhưng bạn không thể hợp nhất' .Where (x => condition) .OrderBy (x => value) 'theo cùng nghĩa. Vì vậy, một lần nữa, biểu thức kết quả trông như thế nào? 'queryable.Where (x => condition) .OrderBy (x => value)' không trả về một biểu thức, nó trả về một 'IQueryable'. –
dtb