zoukankan      html  css  js  c++  java
  • Linq To Sql学习经验

    本文向大家介绍Linq To Sql,可能好多人还不了解Linq To Sql,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。

    Linq To Sql是Microsoft开发的针对解决data!=object问题的新技术。在笔者的一系列的文章中,对它已经做了大量的介绍。现在,笔者将从经验的角度,谈谈它的优劣。

    1、Linq To Sql的优点

    在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可以让他们迅速进入数据库应用程序开发领域,节约了培训成本。

    Linq To SQl 的实现,是在ado.net和c#2.0的基础上的。它通过自动翻译sql语句,并把结果集创建成对象并返回。这里我们可以看出,发送到Sql Server端的sql语句是Linq To Sql自动生成的。这对不懂sql的人来说,无疑是个福音。第二,Linq To Sql语句是在编译期间就做检查的。而不是运行时检查。这样,那里出了问题,可以及时更改,而不是到了运行时才发现问题。第三,Linq To Sql是针对对象操作的,更符合今天的oo呼声。

    在Linq To SQl 之前,在java领域有Hibernate,在net领域有NHibernate技术,来实现object/relational 持久和查询服务。那和NHibernate比起来,它又有那些优势呢.第一,影射代码自动生成。VS2008提供了SqlMetal和OR Designer两个工具来完成此步骤。而在NHibernate中,你不得不自己手工写。第二,影射代码有更多的选择.NHibernate只能把数据库的信息配置在一个xml中,而Linq To Sql有两种方式,一个是放到xml中,我们称为Externl Mapping, 再一种就是以Attribute的形式,存在于各个property中。当然,笔者本人并没有使用过NHibernate,只是从资料上得到这些消息,所以无法给出更多的比较。

    2、Linq To Sql的缺点

    很久前,有个网友问到这么一个问题。他在界面上有个DataView,里面绑定了一些Column,然后他勾选那一列就按某列排序。其传回的参数是列的名字。然后问我该怎么用Dlinq 来实现。

    在以前拼接Sql语句的年代,这个很简单,一个" order by " + string,想按什么排就按什么来排。而现在dlinq是用是一个对象的属性,已经不可能拼接了。我当时给他的答案是这样的。

    Linq使用Group By经验总结

    学习Linq时,经常会遇到Linq使用Group By问题,这里将介绍Linq使用Group By问题的解决方法。

    1.计数

    1. var q =  
    2. from p in db.Products  
    3. group p by p.CategoryID into g  
    4. select new {  
    5. g.Key,  
    6. NumProducts = g.Count()  
    7. }; 

    语句描述:Linq使用Group By和Count得到每个CategoryID中产品的数量。

    说明:先按CategoryID归类,取出CategoryID值和各个分类产品的数量。

    2.带条件计数

    1. var q =  
    2. from p in db.Products  
    3. group p by p.CategoryID into g  
    4. select new {  
    5. g.Key,  
    6. NumProducts = g.Count(p => p.Discontinued)  
    7. }; 

    语句描述:Linq使用Group By和Count得到每个CategoryID中断货产品的数量。

    说明:先按CategoryID归类,取出CategoryID值和各个分类产品的断货数量。 Count函数里,使用了Lambda表达式,Lambda表达式中的p,代表这个组里的一个元素或对象,即某一个产品。

    3.Where限制

    1. var q =  
    2. from p in db.Products  
    3. group p by p.CategoryID into g  
    4. where g.Count() >= 10  
    5. select new {  
    6. g.Key,  
    7. ProductCount = g.Count()  
    8. }; 

    语句描述:根据产品的―ID分组,查询产品数量大于10的ID和产品数量。这个示例在Group By子句后使用Where子句查找所有至少有10种产品的类别。

    说明:在翻译成SQL语句时,在最外层嵌套了Where条件。

    4.多列(Multiple Columns)

    1. var categories =  
    2. from p in db.Products  
    3. group p by new  
    4. {  
    5. p.CategoryID,  
    6. p.SupplierID  
    7. }  
    8. into g  
    9. select new  
    10. {  
    11. g.Key,  
    12. g  
    13. }; 

    语句描述:Linq使用Group By按CategoryID和SupplierID将产品分组。

    说明:既按产品的分类,又按供应商分类。在by后面,new出来一个匿名类。这里,Key其实质是一个类的对象,Key包含两个Property:CategoryID、SupplierID。用g.Key.CategoryID可以遍历CategoryID的值。

    5.表达式(Expression)

    1. var categories =  
    2. from p in db.Products  
    3. group p by new { Criterion = p.UnitPrice > 10 } into g  
    4. select g; 

    语句描述:Linq使用Group By返回两个产品序列。第一个序列包含单价大于10的产品。第二个序列包含单价小于或等于10的产品。

    说明:按产品单价是否大于10分类。其结果分为两类,大于的是一类,小于及等于为另一类。

  • 相关阅读:
    [转]项目管理---敏捷开发思想---带来相当愉快的项目开发过程
    [转] 项目管理---项目经理如何应对客户的需求变更?
    [转]C# 线程知识--使用Task执行异步操作
    [转]细说ASP.NET的各种异步操作
    [转]oracle表分区详解
    解决Asp.net 部署后弹出登陆框
    SVN客户端TortoiseSVN安装配置图文教程
    .net版本区别及发展历程
    CLR via c#读书笔记九:字符、字符串和文本处理
    CLR via c#读书笔记九:接口
  • 原文地址:https://www.cnblogs.com/libaby/p/3837335.html
Copyright © 2011-2022 走看看