gpt4 book ai didi

c# - 使用外部表达式参数的成员属性调用 C# 内部表达式

转载 作者:行者123 更新时间:2023-11-30 12:17:07 26 4
gpt4 key购买 nike

我正在使用此处找到的 Albaharis PredicateBuilder http://www.albahari.com/nutshell/predicatebuilder.aspx在 Linq-to-SQL 应用程序中过滤结果。这一直很好用。

我现在想做的是重用现有的过滤谓词表达式来过滤将现有过滤对象作为属性的对象。

例如,我有 2 个类,OrderCustomer .我已经有一个返回 Expression<Func<Customer, bool>> 的方法,它是使用上述谓词构建器构建的。我现在想在我的 Order 中重用它过滤方法,它将返回一个 Expression<Func<Customer, bool>>通过某种方式传递 Order.Customer属性(表达式?)到我的 Customer过滤方法。

我有这样的东西(远未完成,但我希望你能理解):

public class CustomerSearchCriteria
{
public Expression<Func<Customer, bool>> FilterPredicate()
{
// Start with predicate to include everything
var result = PredicateBuilder.True<Customer>();

// Build predicate from criteria
if (!String.IsNullOrEmpty(this.Name))
{
result = result.And(c => SqlMethods.Like(c.Name, this.Name));
}

// etc. etc. etc

}


public class OrderSearchCriteria
{
public Expression<Func<Order, bool>> FilterPredicate()
{
// Start with predicate to include everything
var result = PredicateBuilder.True<Order>();

// Build predicate from criteria
if (!String.IsNullOrEmpty(this.Reference))
{
result = result.And(o => SqlMethods.Like(o.Reference, this.Reference));
}

// etc. etc. etc
// This is where I would like to do something like:
// result = result.And(o => o.Customer "matches" this.CustomerCriteria.FilterPredicate()
}

Linq 表达式专家可以帮助我吗?

提前致谢。

最佳答案

如果您使用 Albaharis 的 LinqKit ,你应该能够做这样的事情:

var customerFilter = this.CustomerCriteria.FilterPredicate();
// create an expression that shows us invoking the filter on o.Customer
Expression<Func<Order, bool>> customerOrderFilter =
o => customerFilter.Invoke(o.Customer);
// "Expand" the expression: this creates a new expression tree
// where the "Invoke" is replaced by the actual predicate.
result = result.And(customerOrderFilter.Expand())

关于c# - 使用外部表达式参数的成员属性调用 C# 内部表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4198277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com