Вероятно, это сценарий, в котором ручное построение дерева выражений оправдано.Я не могу проверить это без вашего кода, но что-то вроде :
public Entity GetByPropertyValue<T>(string propertyName, T value)
{
var p = Expression.Parameter(typeof(Entity));
var body = Expression.Equal(
Expression.PropertyOrField(p, propertyName),
Expression.Constant(value, typeof(T)));
var lambda = Expression.Lambda<Func<Entity, bool>>(body, p);
return OrganizationContext.CreateQuery("contact").Where(lambda).FirstOrDefault();
}
последняя строка также может быть переписана:
return OrganizationContext.CreateQuery("contact").FirstOrDefault(lambda);
Обратите внимание, что покаэто может выглядеть многословно, на самом деле это то, что компилятор C # генерирует в любом случае для предиката на основе дерева выражений;Итак: это не оказывает никакого влияния на фактическую производительность кода - он все еще делает то же самое.