В примере используется база данных Northwind. База данных имеет таблицу «Заказы», которая имеет «ShipName»
и столбцы "ShipAddress". Каркасная модель сущности в программе на c # имеет
Тип "Order", который имеет свойства "ShipName" и "ShipAddress".
Я хочу найти заказы с Order.ShipName, содержащим "некоторый шаблон" и
Order.ShipAddress, содержащий «другой шаблон». Потому что ShipName и
ShipAddress должен соответствовать некоторому шаблону (может содержать дикий символ * и?), Я
должны использовать хранимую процедуру "sp_FindStringPattern", чтобы сделать строку
поиск по шаблону. Хранимая процедура возвращает целочисленное значение, которое отображается
в System.Boolean после сопоставления хранимой процедуры с функцией c #.
Следующий код компилируется и может работать. Но я не знаю, как объединить
два MethodCallExpression с использованием PredicateBuilder.
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});
}
Вопрос: Как с помощью построителя предикатов объединить выражение вызова двух методов «И»?
Я пробовал много способов, но все не удалось (скомпилировать и запустить, пока не будет построен предикат "И").
Я ценю вашу помощь.