Linq语句 动态组建

 1        public override System.Linq.Expressions.Expression<Func<I_Position_Access, bool>> GetWhereLambda(I_Position_Access t)
 2         {
 3             ParameterExpression parameter = Expression.Parameter(typeof(I_Position_Access), "b");//创建参数b
 4             System.Linq.Expressions.ConstantExpression constant = Expression.Constant(t.I_Position_AccessID);//创建常数
 5             MemberExpression member = Expression.PropertyOrField(parameter, "I_Position_AccessID");
 6
 7             System.Linq.Expressions.BinaryExpression bin =
 8                 Expression.GreaterThan(member, constant);//创建 i > 常数
 9
10             if (t.I_Position_AccessID > 0)
11             {
12                 constant = Expression.Constant(t.I_Position_AccessID);
13                 member = Expression.PropertyOrField(parameter, "I_Position_AccessID");
14                 bin = Expression.Equal(member, constant);
15             }
16             if (t.I_PositionID > 0)
17             {
18                 constant = Expression.Constant(Convert.ToInt32(t.I_PositionID), typeof(int?));
19                 member = Expression.PropertyOrField(parameter, "I_PositionID");
20                 System.Linq.Expressions.BinaryExpression where2 = Expression.Equal(member, constant);
21
22                 bin = Expression.And(bin, where2);
23             }
24             if (t.I_AccessID > 0)
25             {
26                 constant = Expression.Constant(Convert.ToInt32(t.I_AccessID), typeof(int?));
27                 member = Expression.PropertyOrField(parameter, "I_AccessID");
28                 System.Linq.Expressions.BinaryExpression whereI_AccessID = Expression.Equal(member, constant);
29                 bin = Expression.And(bin, whereI_AccessID);
30             }
31             if (t.OpenState > 0)
32             {
33                 constant = Expression.Constant(Convert.ToInt32(t.OpenState), typeof(int?));
34                 member = Expression.PropertyOrField(parameter, "OpenState");
35                 System.Linq.Expressions.BinaryExpression whereOpenState = Expression.Equal(member, constant);
36                 bin = Expression.And(bin, whereOpenState);
37             }
38             return Expression.Lambda<Func<I_Position_Access, bool>>(bin, parameter);
39             //获取Lambda表达式
40         }
时间: 2024-08-01 20:15:16

Linq语句 动态组建的相关文章

动态拼接liinq 使用Expression构造动态linq语句

最近在做动态构造linq语句,从网上找了很多,大多数,都是基于一张表中的某一个字段,这样的结果,从网上可以搜到很多.但如果有外键表,需要动态构造外键表中的字段,那么问题来了,学挖掘机哪家强?哦,不是,应该怎么做呢. 关于动态构造linq的,http://www.cnblogs.com/blusehuang/archive/2007/07/13/816970.html   该文章已经描述的很清楚了.我也不多说了. 其中,关键的代码是: Expression con = Expression.Cal

C#学习记录(七)LINQ语句及LAMDA表达式

LINQ LINQ是一种集成在计算机语言里的信息查询语句,可以让编写者以代码的方式操作数据库. 在C#中,LINQ语句有两种写法. 这是第一种写法 IEnumerable<Customer> result = from customer in customers where customer.FirstName == "Donna“ select customer; 由于这种写法比较容易和SQL语言混淆,所以我更倾向于使用另一种写法 IEnumerable<Customer&g

Linq语句概要

这些都是在SQL语句中经常用到的,因此从形式上看,LINQ 语句与 SQL有很多相似之处.但尽管如此,还应该明确,LINQ与SQL是两种完全不同性质的语言: 第一. LINQ是面向对象的强类型(类型安全)语言: 第二. 从理论上讲,LINQ几乎可以用来访问所有类型的数据(包括数据库). 7.3.2 语句示例 例1.下面是LINQ的一个表达式: var course = from w in "语文 数学 英文 物理 计算机 伦理学 新闻学".Split()      where w.Le

LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别【转】

在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() .例如: string strcon ="Data Source=.\\SQLEXPRESS;Initial Catalog=Db_Example;Persist Security Info=True;User ID=sa;Password=sa";SqlConnection con =new SqlConnection(strcon);con.Open();string strsql

判断linq语句结果是否为空的方法

如: var TasComID = (from ee in LinkToSQL.TasCom                                where ee.TasComNum == cbb_TasComNum.SelectedItem.ToString() && ee.IsDeleted == false                                select ee.TasComID).Distinct(); if(TasComID.FirstOrDe

sqlserver 存储过程中拼接sql语句 动态执行

ALTER PROC [dbo].[Student_Friend_Get] @startRowIndexId INT, @maxNumberRows INT, @schoolId INT, @gradeId INT, @cId INT, @keyWords NVARCHAR(100), @userName VARCHAR(50) AS BEGIN DECLARE @sqlfilter VARCHAR(max) SET @sqlfilter = ' ' IF(@schoolId <> -1) S

LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别

在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() . 上述代码使用LINQ 针对数据集中的数据进行筛选和整理,同样能够以一种面向对象的思想进行数据集中数据的筛选.在使用LINQ 进行数据集操作时,LINQ 不能直接从数据集对象中查询,因为数据集对象不支持LINQ 查询,所以需要使用AsEnumerable 方法返回一个泛型的对象以支持LINQ 的查询操作. .AsEnumerable()是延迟执行的,实际上什么都没有发生,当真正使用对象的时候(例

Linq语句查询简介

查询是一种从数据源检索数据的表达式.查询通常用专门的查询语言来表示.随着时间的推移,人们已经为各种数据源开发了不同的语言:例如,用于关系数据库的 SQL 和用于 XML 的 XQuery.因此,开发人员不得不针对他们必须支持的每种数据源或数据格式而学习新的查询语言.LINQ 通过提供一种跨各种数据源和数据格式使用数据的一致模型,简化了这一情况.在 LINQ 查询中,始终会用到对象.可以使用相同的基本编码模式来查询和转换 XML 文档.SQL 数据库.ADO.NET 数据集..NET 集合中的数据

一句话,将Linq语句转换为Sql语句

 public IEnumerable<VMB_Report> ReportView_List(VMB_ReportConditions requiredModel) { IEnumerable<VMB_Report> resultModel = new List<VMB_Report>(); IQueryable<Merchant> merchantList; merchantList = Report_List(); #region 从Merchan