- 浏览: 59975 次
- 性别:
- 来自: 北京
最新评论
-
chungle:
hatedance 写道这个page method返回的是ht ...
使用 jQuery 调用 ASP.NET AJAX Page Method -
hatedance:
这个page method返回的是html片段吗?也就是说只能 ...
使用 jQuery 调用 ASP.NET AJAX Page Method
有这样一个场景:应用程序可能会提供一个用户界面,用户可以使用该用户界面指定一个或多个谓词来筛选数据。这种情况在编译时不知道查询的细节,动态查询将十分有用。 在LINQ中,Lambda表达式是许多标准查询运算符的基础,编译器创建lambda表达式以捕获基础查询方法(例如 Where、Select、Order By、Take While 以及其他方法)中定义的计算。表达式目录树用于针对数据源的结构化查询,这些数据源实现IQueryable<T>。例如,LINQ to SQL 提供程序实现 IQueryable<T>接口,用于查询关系数据存储。C#和Visual Basic编译器会针对此类数据源的查询编译为代码,该代码在运行时将生成一个表达式目录树。然后,查询提供程序可以遍历表达式目录树数据结构,并将其转换为适合于数据源的查询语言。 表达式目录树在LINQ中用于表示分配给类型为Expression<TDelegate>的变量的Lambda表达式。还可用于创建动态LINQ查询。 System.Linq.Expressions命名空间提供用于手动生成表达式目录树的API。Expression类包含创建特定类型的表达式目录树节点的静态工厂方法,例如,ParameterExpression(表示一个已命名的参数表达式)或 MethodCallExpression(表示一个方法调用)。编译器生成的表达式目录树的根始终在类型Expression<TDelegate>的节点中,其中TDelegate是包含至多五个输入参数的任何TDelegate委托;也就是说,其根节点是表示一个lambda表达式。 下面几个例子描述如何使用表达式目录树来创建动态LINQ查询。 下面例子说明如何使用表达式树依据 IQueryable 数据源构造一个动态查询,查询出每个顾客的ContactName,并用GetCommand方法获取其生成SQL语句。 生成的SQL语句为: 下面一个例子是“搭建”Where用法来动态查询城市在伦敦的顾客。 生成的SQL语句为:
本例既实现排序功能又实现了过滤功能。 下面一张截图显示了怎么动态生成动态查询的过程 生成的SQL语句为: 下面的例子使用表达式树动态查询顾客和雇员同在的城市。 生成的SQL语句为: 动态查询
1.Select
//依据IQueryable数据源构造一个查询
IQueryable<Customer> custs = db.Customers;
//组建一个表达式树来创建一个参数
ParameterExpression param =
Expression.Parameter(typeof(Customer), "c");
//组建表达式树:c.ContactName
Expression selector = Expression.Property(param,
typeof(Customer).GetProperty("ContactName"));
Expression pred = Expression.Lambda(selector, param);
//组建表达式树:Select(c=>c.ContactName)
Expression expr = Expression.Call(typeof(Queryable), "Select",
new Type[] { typeof(Customer), typeof(string) },
Expression.Constant(custs), pred);
//使用表达式树来生成动态查询
IQueryable<string> query = db.Customers.AsQueryable()
.Provider.CreateQuery<string>(expr);
//使用GetCommand方法获取SQL语句
System.Data.Common.DbCommand cmd = db.GetCommand(query);
Console.WriteLine(cmd.CommandText);
SELECT [t0].[ContactName] FROM [dbo].[Customers] AS [t0]
2.Where
IQueryable<Customer> custs = db.Customers;
//创建一个参数c
ParameterExpression param =
Expression.Parameter(typeof(Customer), "c");
//c.City=="London"
Expression left = Expression.Property(param,
typeof(Customer).GetProperty("City"));
Expression right = Expression.Constant("London");
Expression filter = Expression.Equal(left, right);
Expression pred = Expression.Lambda(filter, param);
//Where(c=>c.City=="London")
Expression expr = Expression.Call(typeof(Queryable), "Where",
new Type[] { typeof(Customer) },
Expression.Constant(custs), pred);
//生成动态查询
IQueryable<Customer> query = db.Customers.AsQueryable()
.Provider.CreateQuery<Customer>(expr);
SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName],
[t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region],
[t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax]
FROM [dbo].[Customers] AS [t0] WHERE [t0].[City] = @p0
-- @p0: Input NVarChar (Size = 6; Prec = 0; Scale = 0) [London]
3.OrderBy
IQueryable<Customer> custs = db.Customers;
//创建一个参数c
ParameterExpression param =
Expression.Parameter(typeof(Customer), "c");
//c.City=="London"
Expression left = Expression.Property(param,
typeof(Customer).GetProperty("City"));
Expression right = Expression.Constant("London");
Expression filter = Expression.Equal(left, right);
Expression pred = Expression.Lambda(filter, param);
//Where(c=>c.City=="London")
MethodCallExpression whereCallExpression = Expression.Call(
typeof(Queryable), "Where",
new Type[] { typeof(Customer) },
Expression.Constant(custs), pred);
//OrderBy(ContactName => ContactName)
MethodCallExpression orderByCallExpression = Expression.Call(
typeof(Queryable), "OrderBy",
new Type[] { typeof(Customer), typeof(string) },
whereCallExpression,
Expression.Lambda(Expression.Property
(param, "ContactName"), param));
//生成动态查询
IQueryable<Customer> query = db.Customers.AsQueryable()
.Provider.CreateQuery<Customer>(orderByCallExpression);
SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName],
[t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region],
[t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax]
FROM [dbo].[Customers] AS [t0] WHERE [t0].[City] = @p0
ORDER BY [t0].[ContactName]
-- @p0: Input NVarChar (Size = 6; Prec = 0; Scale = 0) [London]
4.Union
//e.City
IQueryable<Customer> custs = db.Customers;
ParameterExpression param1 =
Expression.Parameter(typeof(Customer), "e");
Expression left1 = Expression.Property(param1,
typeof(Customer).GetProperty("City"));
Expression pred1 = Expression.Lambda(left1, param1);
//c.City
IQueryable<Employee> employees = db.Employees;
ParameterExpression param2 =
Expression.Parameter(typeof(Employee), "c");
Expression left2 = Expression.Property(param2,
typeof(Employee).GetProperty("City"));
Expression pred2 = Expression.Lambda(left2, param2);
//Select(e=>e.City)
Expression expr1 = Expression.Call(typeof(Queryable), "Select",
new Type[] { typeof(Customer), typeof(string) },
Expression.Constant(custs), pred1);
//Select(c=>c.City)
Expression expr2 = Expression.Call(typeof(Queryable), "Select",
new Type[] { typeof(Employee), typeof(string) },
Expression.Constant(employees), pred2);
//生成动态查询
IQueryable<string> q1 = db.Customers.AsQueryable()
.Provider.CreateQuery<string>(expr1);
IQueryable<string> q2 = db.Employees.AsQueryable()
.Provider.CreateQuery<string>(expr2);
//并集
var q3 = q1.Union(q2);
SELECT [t2].[City]
FROM (
SELECT [t0].[City] FROM [dbo].[Customers] AS [t0]
UNION
SELECT [t1].[City] FROM [dbo].[Employees] AS [t1]
) AS [t2]
发表评论
-
LINQ简介
2009-06-10 16:58 643查询表达式(LINQ)简介 在上两篇我介绍了C#3. ... -
LINQ to SQL语句(25)之继承
2009-06-10 16:57 774继承支持 LINQ to SQL 支持单表映射,其整 ... -
LINQ to SQL语句(22)之DataContext
2009-06-10 16:54 695DataContext DataContext作 ... -
LINQ to SQL语句(21)之用户定义函数
2009-06-10 16:52 705用户定义函数 我们 ... -
LINQ to SQL语句(20)之存储过程
2009-06-10 16:51 720存储过程 在我们编写程序中,往往需要一些存储过程,在 ... -
LINQ to SQL语句(19)之ADO.NET与LINQ to SQL
2009-06-10 16:50 791ADO.NET与LINQ to SQL 它基于由 A ... -
LINQ to SQL语句(18)之运算符转换
2009-06-10 16:49 864运算符转换 1.AsEnumerable:将类型转换为泛 ... -
LINQ to SQL语句(17)之对象加载
2009-06-10 16:48 590对象加载 延迟加载 在查询某对象时,实际上你只查询该对 ... -
LINQ to SQL语句(16)之对象标识
2009-06-10 16:47 521对象标识 运行库中的对象具有唯一标识。引用同一 ... -
LINQ to SQL语句(15)之String
2009-06-10 16:46 790字符串(String) LINQ t ... -
LINQ to SQL语句(14)之Null语义和DateTime
2009-06-10 16:46 915Null语义 说明:下面第一个例子说明查询Reports ... -
LINQ to SQL语句(13)之开放式并发控制和事务
2009-06-10 16:45 721Simultaneous Changes开放 ... -
LINQ to SQL语句(12)之Delete和使用Attach
2009-06-10 16:44 754删除(Delete) 1.简单形式 说明:调用Dele ... -
LINQ to SQL语句(11)之Update
2009-06-10 16:43 788更新(Update) 说明:更新操作,先获取对象,进行修 ... -
LINQ to SQL语句(10)之Insert
2009-06-10 16:42 786插入(Insert) 1.简单形式 说明:new一个对 ... -
LINQ to SQL语句(9)之Top/Bottom和Paging和SqlMethods
2009-06-10 16:42 1016Top/Bottom操作 适用场景:适量的取出自己想要的 ... -
LINQ to SQL语句(8)之Concat/Union/Intersect/Except
2009-06-10 16:41 1043Concat/Union/Intersect/Ex ... -
LINQ to SQL语句(7)之Exists/In/Any/All/Contains
2009-06-10 16:39 1402Exists/In/Any/All/Contains操 ... -
LINQ to SQL语句(6)之Group By/Having
2009-06-10 16:38 1083Group By/Having操作符 适用场景:分组 ... -
LINQ to SQL语句(5)之Order By
2009-06-10 16:36 1036Order By操作 适用场景:对查询出的语句进行 ...
相关推荐
在实际开发中,有时我们需要了解LINQ查询是如何转换为SQL语句的,以便于调试和优化性能。以下将详细介绍几种查看LINQ生成SQL语句的方法。 1. **Debug.WriteLine()** 在使用LINQ查询时,可以利用`Debug.WriteLine()...
LINQ to SQL语句.。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 使用Linq的工具
浅谈Linq to sql 的多表关联与动态条件查询 Linq to sql 是一种强大的数据查询语言,它可以帮助开发者快速、高效地访问和操作数据库数据。在本文中,我们将讨论 Linq to sql 的多表关联和动态条件查询这两个重要的...
在本篇中,我们将深入探讨"LINQ to SQL语句(10)之Insert",即如何通过LINQ来插入新的数据记录。 首先,要使用LINQ to SQL,你需要创建一个DataContext对象,它是连接到数据库的桥梁。DataContext包含对数据库中的表...
由于LINQ延迟执行,直到你真正遍历结果集时才会执行SQL语句。 ```csharp foreach (var customer in pagedQuery) { // 处理每个customer对象 } ``` 5. **优化性能**:在某些情况下,为了提高性能,你可能需要...
在LINQ to SQL中,我们专注于与SQL数据库的交互,通过C#或VB.NET代码直接构建SQL查询,从而简化了数据库操作。本篇文章将深入探讨LINQ to SQL中的更新操作,这是对数据库记录进行修改的关键部分。 **1. LINQ to SQL...
LINQ to SQL是一个轻量级的对象关系映射(ORM)工具,它允许开发人员将数据库模式映射到.NET类,然后使用熟悉的C#或VB.NET语言结构直接对这些对象进行查询,而无需编写SQL语句。 在LINQ to SQL中,DataContext是...
LINQ to SQL语句之Join和Order By部分代码 语句描述:这个例子在From子句中使用外键导航筛选在西雅图的雇员,同时列出其所在地区。这条生成SQL语句为: SELECT [t0].[FirstName], [t0].[LastName], [t2]....
本篇文章将深入探讨LINQ to SQL语句中关于“Top”、“Bottom”、分页(Paging)以及SqlMethods的相关知识。 首先,让我们来理解“Top”和“Bottom”这两个概念。在SQL中,`TOP`用于选取结果集的前N行,而“Bottom”...
Linq to Sql语句详解,讲述了Linq to Sql语法详解,包括Linq to sql的动态语句,和继承的应用。还有在分层结构情况下的应用。
- **Linq To Sql动态查询**:Linq To Sql提供了强大的动态查询能力,允许开发者使用对象来构建查询条件,从而避免了SQL字符串拼接的问题,同时也增加了代码的可读性和安全性。 #### 7. Linq To Sql进阶系列(七)...
"LINQ体验——LINQ to SQL语句之Insert/Update/Delete操作" 在本篇文章中,我们将继续讨论LINQ to SQL语句,重点介绍Insert/Update/Delete操作,这些操作在我们的程序中是最常用的。下面,我们将通过多个示例来详细...
开发者可以在.NET类上直接执行查询,而这些查询会被自动转换为对应的SQL语句在数据库中执行。 **3. LINQ to SQL的组成** - **DataContext**:这是LINQ to SQL的核心类,它作为与数据库交互的主要接口,负责管理...
LINQ to SQL是.NET Framework下的一个ORM(Object-Relational Mapping)框架,它允许开发人员通过C#或VB.NET直接操作SQL Server数据库,而无需编写SQL语句。这项技术极大地简化了数据库操作,并提高了代码的可读性和可...
【LINQ to SQL语句(20)之存储过程】 LINQ to SQL 是 .NET Framework 提供的一种数据访问技术,它允许开发人员使用 C# 或 VB.NET 语言直接对关系数据库进行查询,将 SQL 查询语句转化为强类型对象。在这个主题中,...
Linq to SQL 是一种允许开发者使用面向对象编程语言(如C#、VB.NET)编写数据库查询语句的技术。下面我们将详细介绍 Linq to SQL 语句的使用方法和相关知识点。 一、 Linq to SQL 语句(1)之 Where Where 子句是 ...
值得注意的是,由于视图是基于查询的,所以在更新或删除视图数据时,LINQ to SQL会尝试生成相应的UPDATE或DELETE SQL语句,但并非所有视图都支持这些操作。如果视图是只读的,或者由于其定义(如包含聚合函数、GROUP...
【标题】"LINQ TO SQL DEMO"是一个关于使用LINQ (Language Integrated Query) 技术与SQL数据库交互的示例项目。LINQ是.NET框架中的一项重要特性,它允许开发者使用C#或Visual Basic等语言的语法直接进行数据查询,...
Linq 将生成SQL语句显示出来 用于检查linq解析出来的sql语句。 很适合新手学习