拉姆达表达式 追加 条件判断 Expression<Func<T, bool>>

public static class PredicateBuilder
{

/// <summary>
/// 机关函数应用True时:单个AND有效,多个AND有效;单个OR无效,多个OR无效;混应时写在AND后的OR有效
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Expression<Func<T, bool>> True<T>() { return f => true; }

/// <summary>
/// 机关函数应用False时:单个AND无效,多个AND无效;单个OR有效,多个OR有效;混应时写在OR后面的AND有效
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Expression<Func<T, bool>> False<T>() { return f => false; }

public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,
Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);
}

public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,
Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
}
}

---------------------------------------------------------------------------------------

var where = PredicateBuilder.True<SYS_Message>();
where = where.And(p => p.isActive == true);

if (receiveUserId!=null)
{
where = where.And(p => p.MessageReceiveUser == receiveUserId);
}
if (!string.IsNullOrEmpty(messageMain))
{
where = where.And(p =>messageMain.Contains( p.MessageMain) );
}
if ( !string.IsNullOrEmpty(receivrUserName))
{
where = where.And(p =>messageMain.Contains( p.MessageMain)&&aliexpressEntities.YH_User.Where(U=>U.isActive==true&& receivrUserName.Contains(U.first_name)).Select(U=>U.userId).ToList().Contains(Convert.ToInt32( p.MessageReceiveUser)) );

}
if (startTime!=null)
{
where = where.And(p =>p.createTime>=startTime );
}
if (endTime != null)
{
where = where.And(p => p.createTime <= endTime);
}
EntityList = aliexpressEntities.SYS_Message.Where(where.Compile()).OrderByDescending(p => p.createTime).Skip(((int)pageIndex - 1) * pageSize).Take(pageSize).ToList();
protectCount = aliexpressEntities.SYS_Message.Where(where.Compile()).Count();
protectPage = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(protectCount) / pageSize));

 

转载于:https://www.cnblogs.com/520cc/p/4094695.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值