我们为什么要拥抱Linq?

LINQ:

源起:

.net的设计者在类库中定义了一系列的扩展方法,方便用户操作集合对象,这些扩展方法构成了LINQ的查询操作符。


是什么?

LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。


什么时候用?为什么用?有什么好处?

  • 使用便捷;
  • 提供了统一的数据集访问方式(这个人用这种方式取内存数据、那个人用那种方式取XML数据......你这项目要侵入多少额外的操作类?);
  • 需求变化,总是需要在数据库中修改字段,如果用SQL,运行时碰到了才会出错,有了LINQ,编译时就会把错误的地方全报出来。

参考:http://www.cnblogs.com/WYB/archive/2008/07/02/1233850.html


优点:

1、无需复杂学习过程即可上手
2、编写更少代码即可创建完整应用。
3、更快开发错误更少的应用程序。
4、无需求助奇怪的编程技巧就可合并数据源。
5、能够大幅减少过程控制语句的代码块,使代码的可读性和可维护性大幅提高。
6、任何对象或数据源都可以定制实现Linq适配器,为数据交互带来真正方便。

怎么用?

先看一个简单例子:

from n in arr where n < 5 orderby n descending select n;//小于5,并且倒叙排列显示

对比与区分:

1、与lambda表达式,sql,hql实例对比:

lambda表达式:

public IList GetListByLinq()
        {
            IList list = isession.QueryOver().Where(m => m.IsSenior).List();
            return list;
        }

sql(结构化查询语言):

public IList GetListBySql()
    {
        string strSql = "select * from T_School where studentNum>250";
        ISQLQuery sqlQuery = isession.CreateSQLQuery(strSql).AddEntity(typeof(SchoolModel));
        return sqlQuery.List();
    }

hql(Hibernate Query Language):执行HQL语句实例,此处用CreateQuery并设置参数用":",当然也可以拼接字符串;

public IList GetListByHql()
    {
        //实体的名称跟属性大小写都要注意
        string hqlStr = "from SchoolModel c where c.StudentNum>:studentNum";
        return isession.CreateQuery(hqlStr).SetString("studentNum", "250").List();
    }

这样看来,lambda表达式的写法很简单。


2、LINQ与lambda表达式什么关系呢,举个例子吧:

select sname,ssex,class from student
Linq:
    from s in Students
    select new {
        s.SNAME,
        s.SSEX,
        s.CLASS
    }
Lambda:
    Students.Select( s => new {
        SNAME = s.SNAME,SSEX = s.SSEX,CLASS = s.CLASS
    }) 

lambda表达式可读性强一些,可用于linq,但它不仅仅用于linq中,它的使用场景很广滴。


3、LINQ与HQL有什么不同呢?

他们都是对象化查询语言。HQL得到一些ORM的支持,如NHibernate等,以下是查询方式:

LINQ: from c in ctx.Customers select c

HQL:from Customers c

比较一下,区别还是有的,Customers表数据持久化后产生一个领域模型Customers类,注意HQL中Customers是个领域模型;LINQ中的ctx是DataContext实例。


下一节为您讲述,数据持久化,欢迎您的来访!


感谢您的阅读!








你可能感兴趣的:(【技术分享】)