Linq优点


前言

最近开展的新项目要用到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)));
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪杰杰杰杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值