如何构建两个MethodCallExpressions的布尔组合

时间:2011-10-04 03:57:49

标签: entity-framework linq-to-entities

该示例使用Northwind数据库。数据库有一个“订单”表,其中包含“ShipName” 和“ShipAddress”列。 c#程序中的实体框架模型有一个 “订单”类型,具有“ShipName”和“ShipAddress”属性。

我想找到Order.ShipName包含“some pattern”和的订单 Order.ShipAddress包含“其他模式”。因为ShipName和 ShipAddress需要匹配一些模式(可以包含wild char *和?),I 必须使用存储过程“sp_FindStringPattern”来执行该字符串 模式搜索。存储过程返回映射的整数值 存储过程映射到c#函数后到System.Boolean。

以下代码编译并可以运行。但我不知道如何结合 两个使用PredicateBuilder的MethodCallExpression。

    using(NorthwndEntities dataEntities = new NorthwndEntities())
    {
    // build a MethodCallExpression for Order.ShipName searching in database 
    ConstantExpression expEntity = Expression.Constant(dataEntities,typeof(NorthwndEntities));
    ParameterExpression pe = Expression.Parameter(typeof(Order), "o");
    MethodInfo minfo = dataEntities.GetType().GetMethod("sp_FindStringPattern");
    MemberExpression me1 = Expression.PropertyOrField(pe, "ShipName");
    string strName = "A*Corp";  // "*" is wild chars
    ConstantExpression ce1 = Expression.Constant(strName, typeof(string));
    MethodCallExpression meth1 = Expression.Call(expEntity, minfo, new Expression[] { me1, ce1});
    // build a methodCallExpression for Order.ShipAddress searching in database

    MemberExpression me2 = Expression.PropertyOrField(pe, "ShipAddress");
    string strAddr = "Huntington";
    ConstantExpression ce2 = Expression.Constant(strAddr, typeof(string));
    MethodCallExpression meth2 = Expression.Call(expEntity, minfo, new Expression[] { me2, ce2});
    }

问题:如何使用谓词构建器“AND”组合两个方法调用表达式? 我尝试了很多方法,但都失败了(编译并运行直到构建“AND”谓词)。 感谢您的帮助。

0 个答案:

没有答案