比方对于表 table_A (field_1,field_2,,,,field_n)UI层中用户给出的查询条件是不确定的,比如:
可能是   field_1="xxx" and field_2="yyy";
也可能是 field_3="zzz" and field_4<5 and field_4>3 ————————————————————————————————而我所知的Linq查询形式有两种:
一种是构造SQLCommand字符串然后执行,类似于ADO的执行方式,这个相对简单;
另一种是如下形式,但怎样把字段数量和值范围都不确定查询条件转换成如下的查询语句呢?另外这个方式看起来很麻烦,用Linq的好处体现在哪里?
dgv1.DataSource = from c in Customers
                  where c.CustomerID.StartsWith("")
                  select new { 
                      顾客ID = c.CustomerID.Trim() , 
                      顾客名 = c.Name.Trim() , 
                      城市 = c.City.Trim()
                  }

解决方案 »

  1.   


    我不知道如何将多条件转化为 linq 语句比如程序如何将 field_3="zzz" and field_4>3 and field<5 这样的条件自动转化为linq语句?
    或者说如何将用户在UIL输入的条件传递给LINQ(DAL)?以什么形式传递?传递了以后又如何转化成Linq语句?
      

  2.   

    从你的描述来看
    你需要使用DynamicQueryablehttp://www.cnblogs.com/livexy/archive/2010/07/12/1776032.htmldemo:
      var query = db.Customers.NewWhere("City == @0 and Orders.Count >= @1", "London", 10);
      

  3.   

    linq 其实有很简单方法可以DynamicQueryable特别是asp,一个gridview可以动态的由多个combox动态查询(即多条件)
      

  4.   

    下面是转的,
    本文中的例子最终实现的都是同一个功能,从Northwind数据库Customers表中搜索出CompanyName列带有keywords中任意元素的项。keywords是个字符串数组,该数组长度在编译时是不确定的。思路及方法说明写在代码注释中.
    1.表达式树 1    public static IEnumerable<Customers> GetCustomersFunc1(string[] keywords)
     2    {
     3        DataClassesDataContext dc = new DataClassesDataContext();
     4
     5        //创建一个静态类型为Customers的参数表达式
     6        ParameterExpression c = Expression.Parameter(typeof(Customers), "c");
     7
     8        //创建一个恒等于false的表达式,用于与下面的表达式取并集
     9        Expression condition = Expression.Constant(false);
    10        foreach (string keyword in keywords)
    11        {
    12            //该表达式用于判断一个Customers类的CompanyName属性的值是否包含了关键字keyword
    13            Expression con = Expression.Call(                                   
    14                Expression.Property(c, typeof(Customers).GetProperty("CompanyName")),
    15                typeof(string).GetMethod("Contains", new Type[] { typeof(string) }),
    16                Expression.Constant(keyword));
    17
    18            //与之前的condition表达式进行逻辑或运算。
    19            //如果要查找的项需要包含keywords中的所有关键字,则可使用Expression.And(con, condition)
    20            //并且将Expression condition = Expression.Constant(false);
    21            //改成Expression condition = Expression.Constant(true);
    22            condition = Expression.Or(con, condition);                         
    23        }
    24
    25        //创建一个以一个Customers类作为参数并返回bool类型的委托
    26        Expression<Func<Customers, bool>> end = Expression.Lambda<Func<Customers, bool>>(condition, new ParameterExpression[] { c });
    27
    28        //使用刚才构建的条件进行查询
    29        var result = dc.Customers.Where(end);
    30        return result;
    31    }
      

  5.   

    asp下,linq就直接支持动态了例如,拖几个linqDataSoure,拖个listbox或combox,gridview,数据源设置为对应的linqDataSoure,
    gridview对应的linqDataSoure设置where条件就行了