zoukankan      html  css  js  c++  java
  • 拉姆达表达式 追加 条件判断 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));

  • 相关阅读:
    F. 蚂蚁装修
    D. 蚂蚁平面
    B. 蚂蚁觅食(二)
    A 蚂蚁觅食
    落谷 P1734 最大约数和
    F
    D
    Http头 Range、Content-Range(http断点续传原理)
    Http头 Range、Content-Range
    XCODE 4.5 IOS多语言设置 及NSLocalizedString和NSLocalizedStringFromTable的用法。
  • 原文地址:https://www.cnblogs.com/520cc/p/4094695.html
Copyright © 2011-2022 走看看