c# - 使用动态表达式>
问题描述
我有这个代码
public class PropertyFilterSpecification : BaseSpecification<Property>
{
public PropertyFilterSpecification(PropertySearchCriteria sc)
: base(i =>
(!sc.VendorId.HasValue || i.VendorId == sc.VendorId)
&&
(string.IsNullOrWhiteSpace(sc.Name) || i.Name.Contains(sc.Name))
&&
(string.IsNullOrWhiteSpace(sc.Name) || i.Name.Contains(sc.Name))
)
{
AddInclude(b => b.Vendor);
AddInclude($"{nameof(Order.OrderItems)}.{nameof(OrderItem.OrderedProperty)}");
}
}
现在我需要使用动态表达式>
如果我需要我的代码来添加条件
: base(i =>
addif (!sc.VendorId.HasValue , i.VendorId == sc.VendorId)
.
.addif (string.IsNullOrWhiteSpace(sc.Name) || i.Name.Contains(sc.Name))
.`enter code here`addif
(string.IsNullOrWhiteSpace(sc.Name) || i.Name.Contains(sc.Name))
)
以及如何建立动态的creitirea
解决方案
public static Expression<Func<T, bool>> AndIf<T>(this Expression<Func<T, bool>> expr1, bool condition,
Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
if (condition)
return Expression.Lambda<Func<T, bool>>(Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
else
return expr1;
}
推荐阅读
- d3.js - c3.js制作以置信区间为区域的阶梯函数图
- c++ - 打印二维字符数组的最快方法是什么?
- javascript - 用时刻在不同时区抓取日期的一部分
- json - 使用 Postman 的 JSON 请求
- node.js - 第一次调用不将对象传递给端点
- razor - ASP MVC5 当我更改表单上的某些内容并点击保存时,其他数据被删除
- java - 如何将文件中的十六进制值读入字节数组?
- firebase - Cloud Firestore 规则 - 通过它的字段值获取文档
- apache-zeppelin - Apache Zeppelin - 从不同的注释加载(导入)代码
- swift - 在实例化视图时传递值