没有合适的资源?快使用搜索试试~ 我知道了~
c# LINQ学习资料
4星 · 超过85%的资源 需积分: 10 84 下载量 32 浏览量
2010-03-10
13:15:00
上传
评论
收藏 312KB DOC 举报
温馨提示
试读
16页
c# LINQ学习介绍,从整体上讲解LINQ的语法和函数的使用,及其配合SQL和XML的使用。简洁清楚容易从整体把握和理解LINQ.
资源推荐
资源详情
资源评论
C#3.0 之 LINQ(1)
LINQ, 即 Language Integrated Query。很多人熟悉 SQL 语言,用它来操
作数据库非常方便。现在在 C#3.0 中也可以使用相同的语法来操作各种数据,
包括数组,文件,数据库等。由于 LINQ 的东西比较多,准备分三次讲,第一
次主要介绍一下 LINQ,第二次主要介绍用 LINQ 操作数据库,第三次主要介绍
用 LINQ 操作 XML,第四次主 要介绍 LINQ 的一些函数应用。有时间在写一些
关于 LINQ 的专题。
下面看一个例子,程序员就应该拿代码说话:
classProgram
{
staticvoidMain(string[]args)
{
string[]names={"Everett","Albert","George","Harris","David"};
varitems=fromnameinnames
wherename.Length>=6
orderbyname
selectname.ToUpper();
foreach(variteminitems)
Console.WriteLine(item);
}
}
是不是对上面的 from,where,orderby 等单词很熟悉,我们可以很轻松的
像查询数据库一样查询某些数组。其实上述表达式等价于下面这样的写法:
varitems=names.Where(name=>name.Length>=6).OrderBy(name=>name).Select(name=>n
ame.ToUpper());
那么我们为什么能在数组上应用这些方法呢,本来数组上没有这些方法啊?回
忆一下我们原来说过的内容,扩展方法,对,我们在这里看到扩展方法的用武
之地了。而且我们也看到了 Lambda 表达式的应用使得语句更加简洁,易懂。
这些扩展方法定义在哪里呢?我们可以在 System.LINQ 这个程序集里面 看到
这样的定义:
namespaceSystem.LINQ{
publicstaticclassEnumerable{
publicstaticIEnumerable<T>Where<T>(
thisIEnumerable<T>source,Func<T,bool>predicate){
foreach(Titeminsource)
if(predicate(item)
)
yieldreturnitem;
}
}
}
这里我们可以清晰的看到许多 this 关键字,这些正是扩展方法的标志。若果我
们对 Lambda 表达式不是很熟悉的化,上面的 LINQ 语句还可以进一步转化成
委托的形式。
Func<string,bool>filter=delegate(strings){returns.Length>=6;};
Func<string,string>extract=delegate(strings){returns;};
Func<string,string>project=delegate(strings){returns.ToUpper();};
varitems=names.Where(filter).OrderBy(extract).Select(project);
有一个问题,我们会注意到 items 前面是用 var 做它的类型,那么有没有提出
这样的疑问,这个 var 到底是什么类型呢?我们仔细看一下那个
System.LINQ 程序集,就会发现扩转方法返回的是 IEnumerable<T>类型,
一个泛型接口,没错 var 就是这个泛型接口。还 有一个问题就是当 names 满
足什么条件时,我们可以应用 LINQ 表达式进行查询。这一点还要从那个程序
集上仔细观察。我们会发现有一个 source 参 数,根据扩展方法的语法我们知
道这个 source 参数就是调用了这个方法的对象。那么我们可以推断出这个对
象要能转换成 IEnumerable<T>。那什么类型可以成功转换呢?很显然只要
实现了 IEnumerable<T>这个泛型接口的类型都 可以转换。譬如数组类型,
List<T>,等等。当我们还可以自己定义类型只要实现了这个接口就可以用
LINQ 对这个类型进行操作
C#3.0 之 LINQ(2)
LINQ TO SQL 是 LINQ 技术在数据库方面的应用。数据库技术从
OLEDB,ODBC 到 ADO,在到 ADO.NET 到现在的 LINQ TO SQL,让程序员
操作数据库越来越简单。 LINQ 的宗旨就是让查询无处不再,这当然要包括对
数据库的查询。LINQ 不仅仅可以对数据库进行查询,同样
CUID(Create,Update,Insert,Delete)都可以实现,而且非常方便。
下面逐一对查询以及增删改方面进行介绍
要想查询数据库中表的数据,就要先建立对数据库表的映射,就像要想使用
ADO.NET 就需要先把数据库中的数据存到 DataSet 中,看一下代码
/*注意,其中的[Table] 特性表示将 Category 类与数据库中名称为 Category 的表相对应。
[Column] 特性则对应数据库中的列。*/
//这里我不想详细进行说明,以后在写 LINQ 专题的时候专门对这些进行介绍。
[Table(Name="Category")]
publicclassCategory
{
[Column(IsPrimaryKey=true)]
publicstringCategoryId;
[Column]
publicstringName;
[Column]
publicstringDescn;
}
以上就是对数据表的一个映射。使用的数据库是 SQL SERVER2000 中自带的
数据库 Northwind。其实写过 C#的人也应该能看懂上面的代码。建立好对表
的映射之后,就可以对其进行相应的操作了。
注意这里我们使用手工写数据表的映射,其实 MS 为我们提供了相应的自动化
工具 SqlMetal,大家可以使用这个工具自动产生对数据库表映射的代码,效率
比较高,如果自己有什么需要改动的地方还可以对产生的代码进行更改。
DataContextdb=newDataContext("Server=localhost;Database=northwind;Trust_connection=t
rue");
//这里的连接字符串根据自己的配置进行相应更改即可
Table<Category>Categorys=db.GetTable<Category>();
varresult=
fromcinCategorys
selectc;
//大家看到了 DataContext 就相当于 ADO.NET 中的 Connection,但是它提供了更强大功能
//其中 result 就相当于 IEnumerable<Category>如果不知道为什么会推出这个来,可以参考
我原来写的 Lambda 表达式那篇
//下面可以输出 result 中的内容
foreach(varcinresult)
Console.WriteLine("CategoryId={0},Name={1},Descn={2}",c.CategoryId,c.Name,c.Descn)
;
/*这 里对关于 LINQ 的智能感知说明一下。如果用的是 VS2005+LINQ 的插件建的
LINQ 工程,那么在 VS 里面没有对 LINQTOSQL 的智能感知 支持。也就是说当你在输出
的时候,写 c 然后.将不会出现内容,但是你可以按照自己建的映射写出相应的字段,编译
和运行没有问题。如果是用 VS2008也 就是代号为“Orcas”建的 LINQ 工程,那么就有智能
感知的支持。非常方面*/
以上就是对数据库的查询,我们可以写出很复杂的查询来,其实在内部,LINQ
会把你写的 LINQ 语句,转换成 SQL 语句送到数据库中去执行。然后返 回相应
的结果。如果大家想看转换后的 SQL 语句,可以在建立完连接之后加上这样一
句:db.Log=Console.Out。这样程序将自动输出 SQL 语 句和查询结果.这里
只是简单的介绍了一下如何查询,我们知道表与表之间还有关系,这些复杂的
东西我们以后在详细说明。
//更改
stringid=“DOGS";
varcat=db.Categories.Single(c=>c.CategoryId==id);
cat.Name=“NewDogs";
//添加
Productp=newProduct{…….};
cat.Products.Add(p);
//删除
stringid=“DOGS";
varcat=db.Categories.Single(c=>c.CategoryId==id);
db.Categories.Remove(cat)
//提交更改
db.SubmitChanges();
//注意, SubmiChanges()完成了对象层到数据层的更改。也就说不进行提交,更改的结
果不会存储到数据库中。
以上只是对 LINQ TO SQL 进行了简单的介绍,其实它的内容还有很多。以后
在写 LINQ 专题的时候详细说明。
C#3.0 之 LINQ(3)
我们知道关于 XML,W3C 有一套 DOM 模型,C#语言有一套在 DOM 模型下
操作 XML 的类库。但是在 LINQ 出现以后,微软又重新做了一套关于 XML 的
模型,而且操作起来同那套 DOM 模型没什么两样,但是更加的简单。
下面看一下这套模型的图:
剩余15页未读,继续阅读
资源评论
- 普通网友2012-06-27C#的linq很好用,谢谢楼主
- 谢大书2017-08-21还可以,内容有用,学习一下挺好
henryguo2008
- 粉丝: 2
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功