该示例使用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”谓词)。 感谢您的帮助。