文章目录
前言
最近开展的新项目要用到Linq,刚开始接触Linq,对Linq查询做个总结吧
提示:以下是本篇文章正文内容,下面案例可供参考
一、Linq的优点
1.Integrated:集成化
- 把查询语法融入了C#(VB)这些语言中,让他们变成了一种语法
-语句高亮显示,类型检查,允许使用debugger调试。
- 把以前复杂的查询前的工作都成集封装起来,让开发人员侧重于查询。
- 继承后的语法更加的清晰易懂,可读性高
比较:
//原来的格式
SqlConnection sqlConn = new SqlConnection(connectionString);
sqlConn.Open();
SqlCommand command = new SqlCommand();
command.Connection = sqlConn;
command.CommandText = "Select * From Customer";
SqlDataReader dataReader = command.ExecuteReader(CommandBehavior.CloseConnection);
//LINQ的格式
NORTHWNDDataContext dc = new NORTHWNDDataContext();
var query = from c in dc.Customers
select c;
2.Unitive:统一化
-就指不管对任何对类型外部和内部数据源(对象集合,xlm,数据库数据)都使用统一的查询语法
-使用统一化查询语言的好处:
-不用因为使用不太熟悉的数据源而花很多的精力去了解它,你可以快速简单的使用Linq语法进行查询
统一化的体现:
//数据源:对象集合
var query = from c in GetCustomers()
select C;
//数据源:SQL
var query1 = from c in dc.Customers
select c;
//数据源:XML
var query2 = from c in customers.Descendants("Customer")
select c;
3.Extensible:可扩展
-可查询数据源的扩展:LInq提供了一个LInq provider model,可以为LInq创建或提供provider让LInq支持更多的数据源
-可扩展查询方法:开发者可以根据自己的需求为LInq重写和扩展查询方法
这是一些第三方的LInq provider:
LInq Extender LInq to Javascript LInq to Json LInq to Flickr LInq to goole
4.Declarative:声明式
-简单来说指的是开发人员只要告诉程序做什么,程序判断自己怎么做
-提高开发速度 , 因为开发者不用输写大量的代码来具体化执行步骤 , 只需告诉程序做什么。
-提高代码优化空间 ,因为开发者不用参与干涉对程序执行的具体步骤,这样就提供给编译器更多的空间去优化代码
举例SQL来说,LINQ生成的SQL语句往往比一对SQL水平一般的开发者能写出更好的SQL语句。
比较Declarative programming 与 Imperative programming:
//声明式编程
List<List<int>> lists = new List<List<int>> { new List<int> { 1, 2, 3 }, new List<int> { 4, 5 } };
var query = from list in lists
from num in list
where num % 3 == 0
orderby num descending
select num;
//命令式编程
List<int> list1 = new List<int>();
list1.Add(1);
list1.Add(2);
list1.Add(3);
List<int> list2 = new List<int>();
list2.Add(4);
list2.Add(5);
List<List<int>> lists1 = new List<List<int>>();
lists1.Add(list1);
lists1.Add(list2);
List<int> newList = new List<int>();
foreach (var item in lists1)
foreach (var num in item)
if (num % 3 == 0)
newList.Add(num);
newList.Reverse();
5.Hierarchical:层次化
-面向对象的方式抽象对象
-开发者能直接以对象的方式去操作数据,对习惯面相对象的开发者来说面向对象模型更容易理解
6.Composable:可组成
-可以吧一个复杂的查询拆分成多个简单的查询
-Linq返回的结果都是基于接口: IEnumerable,因此能对查询结果继续查询,而且LInq具有延迟执行的特性因此拆分执行不会影响效率
方便调试 把复杂的查询拆分成简单的查询 ,然后逐个调试
便于代码维护, 把代码拆分后能使代码变得更容易理解
例:
//以下代码体现了Composable
List<List<int>> lists = new List<List<int>> { new List<int> { 1, 2, 3 }, new List<int> { 4, 5 } };
var query1 = from list in lists
from num in list
select num;
var query2 = from num in query1
where num % 3 == 0
select num;
var query3 = from num in query2
orderby num descending
select num;
7.Transformative:可转换
-LINQ能把一种数据源的内容转换到其他数据源。方便用户做数据移植。
//把关系型数据转换成XML型
var query = new XElement("Orders",
from c in dc.Customers
where c.City == "Paris"
select new XElement("Order",
new XAttribute("Address", c.Address)));