linq数据访问技术
① 什么是linq技术
LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。
从技术角度而言,LINQ定义了大约40个查询操作符,如select、from、in、where以及order by(C#中)。使用这些操作符可以编写查询语句。不过,这些查询还可以基于很多类型的数据,每个数据类型都需要一个单独的LINQ类型。
经过了最近 20 年,面向对象编程技术( object-oriented (OO) programming technologies )在工业领域的应用已经进入了一个稳定的发展阶段。程序员现在都已经认同像 类(classes)、对象(objects)、方法(methods)这样的语言特性。考察现在和下一代的技术,一个新的编程技术的重大挑战开始呈现出来,即面向对象技术诞生以来并没有解决降低访问和整合信息数据( accessing and integrating information )的复杂度的问题。其中两个最主要访问的数据源与数据库(database)和XML(标准通用标记语言下的一个应用)相关。
LINQ 提供了一条更常规的途径即给.Net Framework添加一些可以应用于所有信息源( all sources of information )的具有多种用途( general-purpose )的语法查询特性( query facilities ),这是比向开发语言和运行时( runtime )添加一些关系数据( relational )特性或者类似 XML 特性( XML-specific )更好的方式。这些语法特性就叫做 .NET Language Integrated Query (LINQ) 。
② 如何使用LINQ链接数据库举个例子(C#.NET)谢谢
1、在App_Code下面添加新项“LINQ
to
sql
类”
2、打开该类,设置Name属性(例如MyLinqDB)和Connection属性
3、服务器资源管理器内添加数据库连接
4、将数据库内需要操作的表拖入LINQ
to
SQL
类的设计视图,并保存
5、新建数据绑定控件例如ListView1
6、后台Page_Load编写代码:
var
DB
=
new
MyLinqDB();
var
query
=
from
t
in
DB.T_Users
select
new
{t.ID,
t.UserName,
t.Password};
ListView1.DataSource
=
query.Where(t
=>
t.ID
>
0).Skip(3
*
20).Take(20);//每页20,第四页
ListView1.DataBind();
③ linq的优势是什么为什么都提倡数据使用用linq呢Asp.net,C#
在Linq To Sql正式推出之前,很多人只是把sql语句形成一个string,然后,通过ADO.NET传给SQL Server,返回结果集.这里的缺陷就是,假如你sql语句写的有问题,只有到运行时才知道.而且并不是所有的人都懂数据库的。Linq To SQl 在一切围绕数据的项目内都可以使用。特别是在项目中缺少sql server方面的专家时,Linq To SQl的强大的功能可以帮我们快速的完成项目。Linq To SQl的推出,是让大家从烦琐的技术细节中解脱出来,更加关注项目的逻辑。Linq To Sql的出现,大大降低了数据库应用程序开发的门楷,它实质是事先为你构架了数据访问层,势必将加快数据库应用程序的开发进度。Linq To Sql解放了众多程序员,让他们的把更多的精力放到业务逻辑以及code上,而不是数据库。对于初学者来讲,Linq To Sql可以让他们迅速进入数据库应用程序开发领域,节约了培训成本。
LZ可以上网查一下 lambda表达式 自动属性 类 集合初始化器等等 这都是linQ的新特性
④ 我想知道 Linq 的特性
linq包含好几个部分
一个是语言语法部分,如C#新添加的select from orderby等,这个跟C#编译器有关系,实际上只是翻译成扩展方法代码罢了,类似array.Select(o => o.Test).OrderBy(o=>o.Pattern)这样的。扩展方法实际上是静态方法,C#编译器会变成静态方法调用,就是Enumerable.OrderBy(Enumerable.Select())这样。
第二个是基本类库部分,这个在.net 3.5添加的,基本的Linq2Object是在Enumerable类内的若干扩展方法。包括支持Linq2Xml的新的类和扩展方法在System.Xml.Linq下,添加的若干DataSet方法等等。
第三个是比较重要的核心类库,Linq表达式树,IQueryable和Provider,这个是实现各种第三方的数据访问的核心,如Linq2Sql、EntityFramework、包括其他如查询Google、Amazon、Facebook,支持SharePoint查询的等等各种各样的Provider
⑤ 在ASP.NET中关于LINQ的使用问题。
在Linq To Sql正式推出之前,很多人只是把sql语句形成一个string,然后,通过ADO.NET传给SQL Server,返回结果集.这里的缺陷就是,假如你sql语句写的有问题,只有到运行时才知道.而且并不是所有的人都懂数据库的。Linq To SQl 在一切围绕数据的项目内都可以使用。特别是在项目中缺少sql server方面的专家时,Linq To SQl的强大的功能可以帮我们快速的完成项目。Linq To SQl的推出,是让大家从烦琐的技术细节中解脱出来,更加关注项目的逻辑。Linq To Sql的出现,大大降低了数据库应用程序开发的门楷,它实质是事先为你构架了数据访问层,势必将加快数据库应用程序的开发进度。Linq To Sql解放了众多程序员,让他们的把更多的精力放到业务逻辑以及code上,而不是数据库。对于初学者来讲,Linq To Sql可以让他们迅速进入数据库应用程序开发领域,节约了培训成本。 LZ可以上网查一下 lambda表达式 自动属性 类 集合初始化器等等 这都是linQ的新特性
⑥ 在.net的linq技术中,什么子句可用于访问单个数据源中的内部集合
.net framworker 3.5增加的新特性
LINQ(Language Integrated Query)是Visual Studio 2008中的领军人物。借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据。目前为止LINQ所支持的数据源有SQL Server、XML以及内存中的数据集合。开发人员也可以使用其提供的扩展框架添加更多的数据源,例如MySQL、Amazon甚至是Google Desktop。
一般来讲,这类查询语句的一个重要特点就是可以并行化执行。虽然有些情况下并行可能会带来一些问题,但这种情况非常少见。这样也就水到渠成地引出了PLINQ这个并行处理的LINQ类库。
PLINQ原名为Parallel LINQ,支持XML和内存中的数据集合。执行于远程服务器上的查询语句(例如LINQ to SQL)显然无法实现这个功能。
将LINQ语句转换为PLINQ语句极为简单——只需要在查询语句中From子句所指定的数据源的最后添加.AsParallel()即可。随后Where、OrderBy和Select子句将自动改为调用这个并行的LINQ版本。
据MSDN Magazine介绍,PLINQ可以以三种方式执行。第一种是管道处理:一个线程用来读取数据源,而其他的线程则用来处理查询语句,二者同步进行——虽然这个单一的消费线程可能并不那么容易与多个生产线程同步。不过若是能够仔细配置好负载平衡的话,仍然会极大地减少内存占用。
第二种模式叫做“stop and go”,用于处理结果集需要被一次返回时(例如调用ToList、ToArray或对结果排序)的情况。在这种模式下,将依次完成各个处理过程,并将结果统一返回给消费线程。这个模式在性能上将优于第一种模式,因为它省去了用来保持线程同步所花费的开销。
最后一种方法叫做“inverted enumeration”。该方法并不需要实现收集到所有的输出,然后在单一的线程中处理,而是将最终调用的函数通过ForAll扩展传递到每个线程中。这是目前为止最快的一种处理模式,不过这需要传递到ForAll中的函数是线程安全的,且最好不包含任何lock之类的互斥语句。
若是PLINQ中任意的一个线程抛出异常,那么所有的其他线程将会被终止。若是抛出了多个异常,那么这些异常将被组合成一个MultipleFailuresException类型的异常,但每个异常的调用堆栈仍会被保留。
⑦ C#的lINQ怎么用干什么用的
1.LINQ:Language Integrated Query 语言集成查询。
2.LINQ通过对象的方式对数据库进行描述。
3.LINQ是一种能够快速对大部分数据源进行访问和数据整合的一种技术,使用相同的基本查询表达式模式类查询和转换SQL数据库、ADO.NET数据集、XML文档和流已经.NET集合中的数据。
4.使用方法:
LINQ to Objects
LINQ to DataSet
LINQ to SQL
LINQ to Entities
LINQ to XML
⑧ 如何使用LINQ链接数据库并操作数据库
之前在远标做过用java连接数据库主要有两种方式,一是用JDBC-ODBC桥来连接,二是用相关厂商提供的相应驱动程序来连接,首先谈谈第一种连接。
JDBC-ODBC桥接器是用JdbcOdbc.Class和一个用于访问ODBC驱动程序的本地库实现的。对于WINDOWS平台,该本地库是一个动态连接库DLL(JDBCODBC.DLL)。
由于JDBC在设计上与ODBC很接近。在内部,这个驱动程序把JDBC的方法映射到ODBC调用上,这样,JDBC就可以和任何可用的ODBC驱动程序进行交互了。这种桥接器的优点是,它使JDBC目前有能力访问几乎所有的数据库。通行方式如图所示:
应用程序---JDBC API---JDBC-ODBC---ODBC API---ODBC层---数据源
具体操作方法为:
首先打开控制面板的管理工具,打开数据源(ODBC),在用户DSN里面添加数据源(即你要连接的数据库的名字),在这里假定连接SQL SERVER 2000的GoodsSupply数据库。名称填写你要连接的数据库的名称(GoodsSupply),然后逐步设置,如果选用了使用SQL-SERVER密码认证的话,就要输入相应的用户名及密码连接到数据库。一路下一步设置完成。
在JAVA里面编写程序进行测试,在这里我的程序是让用户输入任意的表名与与列名,把该列的所有数据输出。源代码如下:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.*;
public class ODBCBridge {
public static void main(String[] args) {
String url="jdbc:odbc:GoodsSupply";
Statement sm=null;
String command=null;
ResultSet rs=null;
String tableName=null;
String cName=null;
String result=null;
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
try {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载驱动
}catch(ClassNotFoundException e){
System.out.println("Can not load Jdbc-Odbc Bridge Driver");
System.err.print("ClassNotFoundException:");
System.err.println(e.getMessage());
}
Connection con=DriverManager.getConnection(url,"USER","PASSWORD"); //使用SQL-SERVER2000认证
DatabaseMetaData dmd=con.getMetaData(); //DMD为连接的相应情况
System.out.println("连接的数据库:"+dmd.getURL());
System.out.println("驱动程序:"+dmd.getDriverName());
sm=con.createStatement();
System.out.println("输入表名");
tableName=input.readLine();
while(true) {
System.out.println("输入列名(为空时程序结束):");
cName=input.readLine();
if(cName.equalsIgnoreCase(""))
break;
command="select "+cName+" from "+tableName;
rs=sm.executeQuery(command); //执行查询
if(!rs.next())
System.out.println("表名或列名输入有误");
else {
System.out.println("查询结果为:");
do
{
result=rs.getString(cName);
//数据库语言设置为中文,不用转换编码
//result=new String(result.getBytes("ISO-8859-1"),"GB2312");
System.out.println(result);
}while(rs.next());
}
}
}catch(SQLException ex) {
System.out.println("SQLException:");
while(ex!=null) {
System.out.println("Message:"+ex.getMessage());
ex=ex.getNextException();
}
}catch(Exception e) {
System.out.println("IOException");
}
}
}
⑨ ASP.NET中的Linq怎么用
21.1.1 准备数据源
既然LINQ可以查询多种数据源和对象,这些对象可能是数组,可能是数据集,也可能是数据库,那么在使用LINQ进行数据查询时首先需要准备数据源。
1.数组
数组中的数据可以被LINQ查询语句查询,这样就省去了复杂的数组遍历。数组数据源示例代码如下所示。
string[] str = { "学习", "学习LINQ", "好好学习", "生活很美好" };
int[] inter = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
数组可以看成是一个集合,虽然数组没有集合的一些特性,但是从另一个角度上来说可以看成是一个集合。在传统的开发过程中,如果要筛选其中包含“学习”字段的某个字符串,则需要遍历整个数组。
2.SQL Server
在数据库操作中,同样可以使用LINQ进行数据库查询。LINQ以其优雅的语法和面向对象的思想能够方便的进行数据库操作,为了使用LINQ进行SQL Server数据库查询,可以创建两个表,这两个表的结构如下所示。Student(学生表):
S_ID:学生ID。
S_NAME:学生姓名。
S_CLASS:学生班级。
C_ID:所在班级的ID。
上述结构描述了一个学生表,可以使用SQL语句创建学生表,示例代码如下所示。
USE [student]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Student](
[S_ID] [int] IDENTITY(1,1) NOT NULL,
[S_NAME] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[S_CLASS] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[C_ID] [int] NULL,
CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED
(
[S_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
为了更加详细的描述一个学生所有的基本信息,就需要创建另一个表对该学生所在的班级进行描述,班级表结构如下所示。Class(班级表):
C_ID:班级ID。
C_GREAD:班级所在的年级。
C_INFOR:班级专业。
上述代码描述了一个班级的基本信息,同样可以使用SQL语句创建班级表,示例代码如下所示。
USE [student]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Class](
[C_ID] [int] IDENTITY(1,1) NOT NULL,
[C_GREAD] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[C_INFOR] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_Class] PRIMARY KEY CLUSTERED
(
[C_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
上述代码在Student数据库中创建了一个班级表,开发人员能够向数据库中添加相应的信息以准备数据源。
3.数据集
LINQ能够通过查询数据集进行数据的访问和整合;通过访问数据集,LINQ能够返回一个集合变量;通过遍历集合变量可以进行其中数据的访问和筛选。在第9章中讲到了数据集的概念,开发人员能够将数据库中的内容填充到数据集中,也可以自行创建数据集。
数据集是一个存在于内存的对象,该对象能够模拟数据库的一些基本功能,可以模拟小型的数据库系统,开发人员能够使用数据集对象在内存中创建表,以及模拟表与表之间的关系。在数据集的数据检索过程中,往往需要大量的if、else等判断才能检索相应的数据。
使用LINQ进行数据集中数据的整理和检索可以减少代码量并优化检索操作。数据集可以是开发人员自己创建的数据集也可以是现有数据库填充的数据集,这里使用上述SQL Server创建的数据库中的数据进行数据集的填充。
21.1.2 使用LINQ
在传统对象查询中,往往需要很多的if、else语句进行数组或对象的遍历,例如在数组中寻找相应的字段,实现起来往往比较复杂,而使用LINQ就简化了对象的查询。由于前面已经准备好了数据源,那么就能够分别使用LINQ语句进行数据源查询。
1.数组
在前面的章节中,已经创建了一个数组作为数据源,数组示例代码如下所示。
int[] inter = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
上述代码是一个数组数据源,如果开发人员需要从其中的元素中搜索大于5的数字,传统的方法应该遍历整个数组并判断该数字是否大于5,如果大于5则输出,否则不输出,示例代码如下所示。
using System;
using System.Collections.Generic;
using System.Linq; //使用必要的命名空间
using System.Text;
namespace _21_1
{
class Program
{
static void Main(string[] args)
{
string[] str = { "学习", "学习LINQ", "好好学习", "生活很美好" }; //定义数组
int[] inter = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (int i = 0; i < inter.Length; i++) //遍历数组
{
if (inter[i] > 5) //判断数组元素的值是否大于5
{
Console.WriteLine(inter[i].ToString()); //输出对象
}
}
Console.ReadKey();
}
}
}
上述代码非常简单,将数组从头开始遍历,遍历中将数组中的的值与5相比较,如果大于5就会输出该值,如果小于5就不会输出该值。虽然上述代码实现了功能的要求,但是这样编写的代码繁冗复杂,也不具有扩展性。如果使用LINQ查询语句进行查询就非常简单,示例代码如下所示。
class Program
{
static void Main(string[] args)
{
string[] str = { "学习", "学习LINQ", "好好学习", "生活很美好" }; //定义数组
int[] inter = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //定义数组
var st = from s in inter where s > 5 select s; //执行LINQ查询语句
foreach (var t in st) //遍历集合元素
{
Console.WriteLine(t.ToString()); //输出数组
}
Console.ReadKey();
}
}
使用LINQ进行查询之后会返回一个IEnumerable的集合。在上一章讲过,IEnumerable是.NET框架中最基本的集合访问器,可以使用foreach语句遍历集合元素。使用LINQ查询数组更加容易被阅读,LINQ查询语句的结构和SQL语法十分类似,LINQ不仅能够查询数组,还可以通过.NET提供的编程语言进行筛选。例如str数组变量,如果要查询其中包含“学习”的字符串,对于传统的编程方法是非常冗余和繁琐的。由于LINQ是.NET编程语言中的一部分,开发人员就能通过编程语言进行筛选,LINQ查询语句示例代码如下所示。
var st = from s in str where s.Contains("学习") select s;
2.使用SQL Server
在传统的数据库开发中,如果需要筛选某个数据库中的数据,可以通过SQL语句进行筛选。在ADO.NET中,首先需要从数据库中查询数据,查询后就必须将数据填充到数据集中,然后在数据集中进行数据遍历,示例代码如下所示。
try
{
SqlConnection
con = new SqlConnection("server='(local)';database='student';uid='sa';pwd='sa'"); //创建连接
con.Open(); //打开连接
string strsql = "select * from student,class where student.c_id=class.c_id"; //SQL语句
SqlDataAdapter da = new SqlDataAdapter(strsql, con); //创建适配器
DataSet ds = new DataSet(); //创建数据集
int j = da.Fill(ds, "mytable"); //填充数据集
for (int i = 0; i < j; i++) //遍历集合
{
Console.WriteLine(ds.Tables["mytable"].Rows[i]["S_NAME"].ToString()); //输出对象
}
}
catch
{
Console.WriteLine("数据库连接错误"); //抛出异常
}
上述代码进行数据库的访问和查询。在上述代码中,首先需要创建一个连接对象进行数据库连接,然后再打开连接,打开连接之后就要编写SELECT语句进行数据库查询并填充到DataSet数据集中,并在DataSet数据集中遍历相应的表和列进行数据筛选。如果要查询C_ID为1的学生的所有姓名,有三个办法,这三个办法分别是:
修改SQL语句。
在循环内进行判断。
使用LINQ进行查询。
修改SQL语句是最方便的方法,直接在SELECT语句中添加查询条件WHERE C-ID=1就能够实现,但是这个方法扩展性非常的低,如果有其他需求则就需要修改SQL语句,也有可能造成其余代码填充数据集后数据集内容不同步。
在循环内进行判断也是一种方法,但是这个方法当循环增加时会造成额外的性能消耗,并且当需要扩展时,还需要修改循环代码。最方便的就是使用LINQ进行查询,在Visual Studio 2008中提供了LINQ to SQL类文件用于将现有的数据抽象成对象,这样就符合了面向对象的原则,同时也能够减少代码,提升扩展性。创建一个LINQ to SQL类文件,直接将服务资源管理器中的相应表拖放到LINQ to SQL类文件可视化窗口中即可,如图21-1所示。
图21-1 创建LINQ to SQL文件
创建了LINQ to SQL类文件后,就可以直接使用LINQ to SQL类文件提供的类进行查询,示例代码如下所示。
linqtosqlDataContext lq = new linqtosqlDataContext();
var mylq = from l in lq.Student from cl in lq.Class where l.C_ID==cl.C_ID select l; //执行查询
foreach (var result in mylq) //遍历集合
{
Console.WriteLine(result.S_NAME.ToString()); //输出对象
}
上述代码只用了很短的代码就能够实现数据库中数据的查询和遍历,并且从可读性上来说也很容易理解,因为LINQ查询语句的语法基本与SQL语法相同,只要有一定的SQL语句基础就能够非常容易的编写LINQ查询语句。
3.数据集
LINQ同样对数据集支持查询和筛选操作。其实数据集也是集合的表现形式,数据集除了能够填充数据库中的内容以外,开发人员还能够通过对数据集的操作向数据集中添加数据和修改数据。前面的章节中已经讲到,数据集可以看作是内存中的数据库。数据集能够模拟基本的数据库,包括表、关系等。这里就将SQL Server中的数据填充到数据集即可,示例代码如下所示。
try
{
SqlConnection
con = new SqlConnection("server='(local)';database='student';uid='sa';pwd='sa'"); //创建连接
con.Open(); //打开连接
string strsql = "select * from student,class where student.c_id=class.c_id"; //执行SQL
SqlDataAdapter da = new SqlDataAdapter(strsql, con); //创建适配器
DataSet ds = new DataSet(); //创建数据集
da.Fill(ds, "mytable"); //填充数据集
DataTable tables = ds.Tables["mytable"]; //创建表
var dslq = from d in tables.AsEnumerable() select d; //执行LINQ语句
foreach (var res in dslq)
{
Console.WriteLine(res.Field<string>("S_NAME").ToString()); //输出对象
}
}
catch
{
Console.WriteLine("数据库连接错误");
}
上述代码使用LINQ针对数据集中的数据进行筛选和整理,同样能够以一种面向对象的思想进行数据集中数据的筛选。在使用LINQ进行数据集操作时,LINQ不能直接从数据集对象中查询,因为数据集对象不支持LINQ查询,所以需要使用AsEnumerable方法返回一个泛型的对象以支持LINQ的查询操作,示例代码如下所示。
var dslq = from d in tables.AsEnumerable() select d; //使用AsEnumerable
上述代码使用AsEnumerable方法就可以让数据集中的表对象能够支持LINQ查询。
21.1.3 执行LINQ查询
从上一节可以看出LINQ在编程过程中极大的方便了开发人员对于业务逻辑的处理代码的编写,在传统的编程方法中复杂、冗余、难以实现的方法在LINQ中都能很好的解决。LINQ不仅能够像SQL语句一样编写查询表达式,LINQ最大的优点也包括LINQ作为编程语言的一部分,可以使用编程语言提供的特性进行LINQ条件语句的编写,这就弥补了SQL语句中的一些不足。在前面的章节中将一些复杂的查询和判断的代码简化成LINQ应用后,就能够执行应用程序判断LINQ是否查询和筛选出了所需要的值。
1.数组
在数组数据源中,开发人员希望能够筛选出大于5的元素。开发人员将传统的代码修改成LINQ代码并通过LINQ查询语句进行筛选,示例代码如下所示。
var st = from s in inter where s > 5 select s; //执行LINQ查询
上述代码将查询在inter数组中的所有元素并返回其中元素的值大于5的元素的集合,运行后如图21-2所示。
图21-2 遍历数组
LINQ执行了条件语句并返回了元素的值大于5的元素。LINQ语句能够方便的扩展,当有不同的需求时,可以修改条件语句进行逻辑判断,例如可以筛选一个平方数为偶数的数组元素,直接修改条件即可,LINQ查询语句如下所示。
var st = from s in inter where (s*s)%2==0 select s; //执行LINQ查询
上述代码通过条件(s*s)%2==0将数组元素进行筛选,选择平方数为偶数的数组元素的集合,运行后如图21-3所示。
图21-3 更改筛选条件
2.使用SQL Server
在LINQ to SQL类文件中,LINQ to SQL类文件已经将数据库的模型封装成一个对象,开发人员能够通过面向对象的思想访问和整合数据库。LINQ to SQL也对SQL做了补充,使用LINQ to SQL类文件能够执行更强大的筛选,LINQ查询语句代码如下所示。
var mylq = from l in lq.Student from cl in lq.Class where l.C_ID==cl.C_ID select l; //执行LINQ查询
上述代码从Student表和Class表中筛选了C_ID相等的学生信息,这很容易在SQL语句中实现。LINQ作为编程语言的一部分,可以使用更多的编程方法实现不同的筛选需求,例如筛选名称中包含“郭”字的学生的名称在传统的SQL语句中就很难通过一条语句实现,而在LINQ中就能够实现,示例代码如下所示。
var mylq = from l in lq.Student from cl in lq.Class where l.C_ID==cl.C_ID where
l.S_NAME.Contains("郭") select l; //执行LINQ条件查询
上述代码使用了Contains方法判断一个字符串中是否包含某个字符或字符串,这样不仅方便阅读,也简化了查询操作,运行后如图21-4和图21-5所示。
图21-4 简单查询 图21-5 条件查询
LINQ返回了符合条件的元素的集合,并实现了筛选操作。LINQ不仅作为编程语言的一部分,简化了开发人员的开发操作,从另一方面讲,LINQ也补充了在SQL中难以通过几条语句实现的功能的实现。从上面的LINQ查询代码可以看出,就算是不同的对象、不同的数据源,其LINQ基本的查询语法都非常相似,并且LINQ还能够支持编程语言具有的特性从而弥补SQL语句的不足。在数据集的查询中,其查询语句也可以直接使用而无需大面积修改代码,这样代码就具有了更高的维护性和可读性。