比方对于表 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()
}
可能是 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()
}
解决方案 »
- 求演算法与程序设计相关书籍
- asp.net
- TabControl的Page问题
- 使用访问数据库的参数
- 急求“数据库失去连接问题”的解决方法
- !!!Asp.net下服务器端杀死Excel进程的办法??
- 求救: C#控制台程序转为WinForm应用程序
- 一张图片随机的放进N个Picturebox中,每次放一张图片
- net中有关<INPUT id="a" type="file"runat="server">控件不能使用大于4M文件的问题
- 两个线程调用一个类中的读库怎么写,才能不会出现datareader已打开的问题
- 在WinCE嵌入式开发环境下,为何抓取的错误信息只显示成SqlException
- 求解答一道线程同步的题的疑问?
我不知道如何将多条件转化为 linq 语句比如程序如何将 field_3="zzz" and field_4>3 and field<5 这样的条件自动转化为linq语句?
或者说如何将用户在UIL输入的条件传递给LINQ(DAL)?以什么形式传递?传递了以后又如何转化成Linq语句?
你需要使用DynamicQueryablehttp://www.cnblogs.com/livexy/archive/2010/07/12/1776032.htmldemo:
var query = db.Customers.NewWhere("City == @0 and Orders.Count >= @1", "London", 10);
本文中的例子最终实现的都是同一个功能,从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 }
gridview对应的linqDataSoure设置where条件就行了