条件Lamada树生成器

原创 2012年03月23日 14:07:40
    /// <summary>
    /// 条件表达式生成器
    /// </summary>
    public static class PredicateBuilder
    {
        public static Expression<Func<T, bool>> True<T>() { return f => true; }
        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);
        }
    }
       /// <summary>
       /// 查询
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void btnSearch_Click(object sender, EventArgs e)
        {


            Expression<Func<Company, bool>> expr = Select();
            var source = from c in db.Company.Where(expr)
                         select c;
            rptSupplier.DataSource = source.Skip(anpPage.PageSize * (anpPage.CurrentPageIndex - 1)).Take(anpPage.PageSize); ;
            rptSupplier.DataBind();
            anpPage.RecordCount = source.Count();


        }
        /// <summary>
        /// 获取多条件查询树
         /// </summary>
        /// <returns></returns>
        public Expression<Func<Company, bool>> Select()
        {
            var predicate = PredicateBuilder.True<Company>();
            if (!string.IsNullOrEmpty(txtComanyName.Text))
            {
                predicate = predicate.And(p => p.CompanyName.Contains(txtComanyName.Text.Trim()));
            }
            if (!string.IsNullOrEmpty(txtContactName.Text))
            {
                predicate = predicate.And(p => p.ContactName.Contains(txtContactName.Text.Trim()));
            }
            if (!string.IsNullOrEmpty(txtContactTitle.Text))
            {
                predicate = predicate.And(p => p.ContactTitle.Contains(txtContactTitle.Text.Trim()));
            }
            if (!string.IsNullOrEmpty(txtCity.Text))
            {
                predicate = predicate.And(p => p.City.Contains(txtCity.Text.Trim()));
            }
            return predicate;
        }


相关文章推荐

黑马程序员_学习日记55_628三层项目(用类封装用于拼接的where条件语句、写代码生成器)

一、用类封装用于拼接的where条件语句(三层实现多条件搜索) (一)   思想: 多条件搜索时拼接where条件语句,以前是在查询方法中用List和List分别存储where条件语句和查询参...

1.lamada教学-java8新特性

函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西)。简单来说,函数式接口是只包含一个方法的接口。比如Java标准库中的java.lang.Runn...

C++11可变数量模板参数可变类型模板参数并使用lamada函数调用使用范例

为了完成这个功能,耗费一整天。 背景是需要到一张表中查询,条件不一样,但是都可以通过PreparedStatement_setXX设置,想体验一把C++11的高级模板特性,设计如下封装 inlin...

AS配置启用Lamada表达式的环境

启用Lambda 启用 Lamdba 目前有两种方式,一个是使用Google官方的,一个是使用第三方Java8兼容插件, 推荐使用第三方兼容插件 。 基本要求如下: Android ...

从JAVA行为参数化到 JAVA8 lamada,方法引用

JAVA8无疑是JAVA的一次重大升级,JAVA8中引入了很多函数编程的思想。其中包括:lamada、stream流式编程、函数接口,方法引用等。本文主要讲解lamada,以及匿名函数的演化过程,最后...

带附加条件的二叉树的java实现

  • 2012年02月04日 03:00
  • 963B
  • 下载

JDK8 lamada表达式学习笔记

不错的总结:http://www.importnew.com/16436.html 简单记录下学习lamada使用方式的体会,lamada概念性的东西先不涉及。 java 7 内置的函数式接口: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:条件Lamada树生成器
举报原因:
原因补充:

(最多只允许输入30个字)