请大家说说Linq的缺点优点:
1.Linq提供了不同数据源的抽象层,所以可以使用相同的语法访问不同的数据源(只要该数据源有提供程序即可)
2.Linq为底层的数据存储提供了一个强类型化的界面,可以把底层的数据作为对象来访问。
3.推迟查询的执行。在运行期间定义的查询表达式时,查询不会运行。查询会在迭代数据项时运行。
(不知道第3点的优点在那里?)
4.Linq 语句是在编译期间就做检查的。而不是运行时检查。这样,那里出了问题,可以及时更改,而不是到了运行时才发现问题。
请大家说说它的缺点在那里?以及还有那些优点?(上面如果有错的地方,谢谢指正)
最后说说它的性能怎样?我用过Linq to Xml感觉比原先操作xml的类好用,

解决方案 »

  1.   

    使用linq后,以后会越来越少人懂SQL了
      

  2.   

    LINQ为不会数据库的准备的,是傻瓜式编程
      

  3.   

    Linq主要是在什么情况下使用?
      

  4.   

    没用过
     也不打算用 我还是喜欢自己写SQL代码,能看明白
    linq封装的看不懂
      

  5.   

    用过,现在还在用,性能据说是比ADO.NET要高,还没感觉出来,类似与ADO时期的ORM吧,有利有弊吧,
      

  6.   

    一直在用linq to sql。数据集感觉比ds灵活。
      

  7.   

    别开玩笑了, 微软还在吹嘘 linq 只比 ado.net 的效率差 15%-20% 呢, 实际上肯定不止.你看看别的 orm 的测试报告, 一般的效率损失都在 30% 以上, 你居然说 linq 比原生的 ado.net 还要高???
      

  8.   

    LZ说的不太准确····如果是linq to sql 那性能肯定不如ado.net如果是linq to object 或者linq to dataset
    那操作会很方便,而且性能和直接循环遍历差不多把·~~
      

  9.   

    linq 根本就不可能比 ado.net 效率高,功能多了反而效率高了?相当于坦克的装甲厚了反而灵活了?我用过linq to sql 感觉不错,对于新东西我觉得还是报着认识和学习的态度,怎么不说说linq的优点呀,对新知识都对立,还咋进步
      

  10.   

    怎么一说到linq大家就tosql啊
    我认为linqtosql只是一个例子,至于以后可能ms对他的支持不会太多
    linq主要就是对一个集合的对象话查询,丫也是委托,就是叫你写的少了,更加向高级方向发展了
    我忘记是那个网了,他总结收linqTO*,已经有了20多了个了
      

  11.   

    “性能据说是比ADO.NET要高”
    怎么可能,我用脚趾头想都想的明白
      

  12.   

    Linq还有那些优点?
    谁有在实际项目中使用过的来谈谈经验啊
      

  13.   

    LINQ 高级化的数据组件,
    相对DATASET 来说有更强的功能,
    但结构复杂,效率低下!
    效率低应该是最大缺点了!
      

  14.   

    效率低应该是最大缺点了?
    linq to xml是不是也比XPath效率低?
      

  15.   

    效率低应该是最大缺点了?
    linq to xml是不是也比XPath效率低?
      

  16.   

    linq to object 和linq to xml用起来不错
      

  17.   

    Linq优点很多,暂时还没发现缺点,挺好用,
    缺点是我用得还不够熟!
      

  18.   


    LINQ里面操作符分为Deferred和 NonDeferred
    对于第一种Deferred(推迟)Opeartor// Create an array of ints.
    int[] intArray = new int[] { 1,2,3 };
    IEnumerable<int> ints = intArray.Select(i => i);
    // Display the results.
    foreach(int i in ints)
    Console.WriteLine(i);
    // Change an element in the source data.
    intArray[0] = 5;
    Console.WriteLine("---------");
    // Display the results again.
    foreach(int i in ints)
    Console.WriteLine(i);输出:
    1
    2
    3
    ---------
    5
    2
    3
      

  19.   

    http://you.video.sina.com.cn/a/2046157-1349419557.html 
      

  20.   

    linq to obj, linq to dataset这两个至少很有帮助。
      

  21.   

    Linq to Sql会破坏分层,把DAL和BLL混合到一个Linq to Sql语句里面。
      

  22.   

    学习asp.net的,使用linq的话会逐渐遗忘t-sql,解决问题的能力也会下降
    从执行效率考虑,linq不如传统模式
      

  23.   

    用了linq后会有更多的人懂linq了! 但是忘记SQ了  
    最重要的是忘记底层的东西了!~
      

  24.   

    在应用LINQ的时候,不能联动改变这是致命伤啊,我是这么认为的。
    就是说,当你在SQL server中做了一些改变的时候,之前生成的LINQ并不会自动改变,需要手动删除重新生成,
    在很多情况下非常不方便。
      

  25.   

    1、仅仅是 LINQ 比较酷的语法,绝不足以决定项目所用的技术。
    2、强调一点,绝不要把 LINQ 与 Linq to SQL(DLINQ) 混为一谈,DLINQ 仅仅是 LINQ 的一个应用,绝非 LINQ 的全部。与 LINQ 一同来到的是大量的编译器特性,不论是 C#3 或是 VB9,都有着许多令人耳目一新的新语法特性。然而,由于 .Net Framework 3.x 都是 .Net Framework 2 的超集,所以所有的语法特性都不过是编译时的翻译。如果您试图反编译 LINQ 表达式,Lambda 或匿名函数,您将见到大批的函数嵌套,不知名的函数与其他令人头昏脑涨的程序结构。这一切都是编译器代为完成的。您无需担心 C# 中的 Var,或是 VB 中的无需 As 的变量定义带来的装/拆箱问题,它们将在 IL 中被推断为真实的数据类型。
    3、探讨 LINQ 的性能问题时,我们将不仅局限于简单的时间比较,还将对 LINQ 的实现代码进行简单的分析,并就 Linq to SQL 生成的 T-SQL 语句讨论优化数据库性能的方法。工欲善其事,必先利其器,此系列中测试的平台基于 SQL Server 2005 SP2,反编译工具采用 Lutz Roeder's Reflector。
    4、由于应用了扩展方法,LINQ 得以查询任何现有 IEnumerable(Of T) 的内容。但是,性能问题却被隐藏在通用性与易用性之下。让我们做一个简短的测试,测试是使用 LINQ 获取一个随机数字数组的开头,结尾与总计,并与传统方式按数组索引获取作出对比。测试代码如下:  Visual Basic 9 - LINQ 性能测试: 获取随机数组数据Sub Main()
            Dim Start As Integer
            For Count As Integer = 0 To 2
                Dim Random As New Random
                Dim TempArray As New List(Of Integer)
                '生成测试数组
                For I As Integer = 0 To 50000
                    TempArray.Add(Random.Next(10000, 99999))
                Next
                '进行测试查询
                Dim Source As Integer() = TempArray.ToArray
                '计算时间
                '获取最后一条
                Start = Timer
                Dim Last As Integer, First As Integer, Length As Integer
                For I As Integer = 0 To 500000
                    Last = Source.Last
                    First = Source.First
                    Length = Source.Count
                Next
                System.Console.WriteLine("Linq 查询数组首末与统计耗时: " & Math.Abs(Timer -Start) * 1000 & " 毫秒")
                '方法2: 计算时间
                Start = Timer
                '获取最后一条
                Length = Source.Length - 1
                For I As Integer = 0 To 500000
                    Last = Source(Length - 1)
                    First = Source(0)
                    Length = Source.Length
                Next
                System.Console.WriteLine("传统查询数组首末与统计耗时: " & Math.Abs(Timer - Start) * 1000 & " 毫秒")
            Next
        End Sub
      程序运行于 Release 模式下,连续测试3次。测试结果如下:  Linq 查询数组首末与统计耗时: 2109.375 毫秒
      传统查询数组首末与统计耗时: 296.875 毫秒
      Linq 查询数组首末与统计耗时: 2406.25 毫秒
      传统查询数组首末与统计耗时: 406.25 毫秒
      Linq 查询数组首末与统计耗时: 2156.25 毫秒
      传统查询数组首末与统计耗时: 218.75 毫秒  看到这里,通用的 LINQ 与传统方法的差距就已明了。5、www.soobb.com
      

  26.   

    虽然没有用过,不过却相信越是简单的越封装的多那效率也就越不怎么滴....所以..........汇编>c+++>c#&java.....不知道我感觉的对不对.......
      

  27.   

    虽然没有用过,不过却相信越是简单的越封装的越多...那效率也就越不怎么滴....所以..........汇编>c+++>c#&java.....不知道我感觉的对不对.......
      

  28.   

    我觉得虽然微软对它进行了分装优化,功能还是不如原来的单独执行sql,毕竟需要转化。我猜linq的功能和hibernate类似吧,刚才有人说学习曲线太陡了,都是配置文件,搞搞数据库字段,直接调用插入,删除函数。
      

  29.   

    人类工具发展的趋势是越来越方便,但同时牺牲掉一定的效率,这是大趋势。比如自动档的汽车,比如windows,比如LINQ,呵呵
      

  30.   

    一坨人吧Linq 和 Linq To SQL 等同起来了~
      

  31.   

    LINQ的精华其实是LinqToObject其他方面特别是LinqToSql实际上就是自动帮你把访问数据库的类写好了而已。
      

  32.   

    当然是缺点了,另外Linq操作数据库会比ADO.NET操作数据库的效率要低。
      

  33.   

    没听说会比ADO.NET高的,因为在底层访问数据库的时候还是用的ADO.NET呢。
      

  34.   

    单就LINQ TO SQL 来说 其实我还是喜欢用SQL。
      

  35.   

    1.需要学习.
    2.用久了SQL忘光.
    3.程序性能
      

  36.   

    我喜欢 linq to object linq to xml。
    对数据库操作还是喜欢直接用sql。
    如果还需要二次操作则再 linq to dataset
      

  37.   

    我认为这是一个进步,从原理上我说不上来,但是我知道没有人研究的东西是倒退的。我认为高级的东西越研究就越自动化了,而不是什么覆盖底层技术之类的,因为底层的东西可以有它自己的语言来实现。比如C/C++现在也很多用的,一边都是用这些语言来开发底层的,没有说有人用.net4.0来开发顶层东西。
    每种语言的缺点肯定是有的。但是相比优点来讲,肯定是少于优点的。
      

  38.   

    unixlinuxsys  你的 取首、尾的例子我认为是个特例,
     Last = Source.Last 和   First = Source.First 
    肯定不如
    Last = Source(Length - 1) 和   First = Source(0) 
    来的快,因为后者是直接通过下标来访问的,而第一种是通过查找得的。
      

  39.   

    关于Linq操作数据库与ADO.NET操作数据库的效率问题要分清情况讨论
    如果是和ADO.Net的IDataReader相比(并且最终执行的是一样的SQL语句),那无论如何,Linq是没有可能的性能优势的
    但是如果是和ADO.Net的DataTable相比,那就不一定了,填充DataTable一样有消耗,哪一个的消耗更大还要具体分析
      

  40.   

    看来还是不用Linq了,sql还是比较灵活的,复杂的数据处理时候还是sql好吧~还有把bll和dal层揉一起了,应该不利于程序处理的分工
      

  41.   

    linq最大的缺点是有个bug,多表级联更新时候有bug。
    ms也已经认罪了。。
      

  42.   

    linq to sql被微软放弃了.
    谁有其他LINQ连接SQLSERVER的方法呀?
      

  43.   

    都说是傻瓜式的,可我还不会用,准确说还没去看过,我只用过vs2002,vs2005,郁闷
      

  44.   

    Linq的存在自然是有存在的理由。应该讨论它比SQL在那些应用方面更优秀,以便我们更好的使用Linq.
      

  45.   

    Linq 和正则表达式,Xpath有点类似:
    1,是语言中的语言,带来了很多方便。
    2,不用Linq 和正则,Xpath也能搞定问题,但是麻烦。缺点倒谈不上,问题确实存在,楼上的一些同学说的很好,我总结一下:
    1,使用linq,需要协调好新旧技术的关系,对团队协调有影响。
    2,分散了新人学习SQL,Xpath,正则的精力,尤其是对SQL基本功的练习。
    3,Linq推广程度还不足,不能达到SQL的地步,只会Linq很危险。
    4,不能代替高性能计算。
     
    针对以上问题,采取的态度应该是:
    1,确认团队80%以上人员熟悉Linq再做架构修改,不要一下子过渡的太急噪,但也要建议大家自学或互相学习Linq应用。
    2,新人各种技术都要学习,不可以只学Linq,忽视了QL,Xpath,正则。
    3,注意行业动向,Linq达到一定行业推广,再行动。
    4,打好算法与数据结构基础,遇到性能瓶颈,可以换一种算法来解决。
      

  46.   

    就本人看法
    linq能带来不少方便,不过要以能提高开发效率为本,
    如果大家都不会。可能都不一定好。linq的缺点就是大数据量的时间效率实在是个问题。不过ORM都是以牺牲效率,来方便的
      

  47.   


    我觉得知道缺点才能更好的在那里应用或在那里不能用,
    而且书上讲的大部分都是优点,所以缺点来的更宝贵
    知道某一东西的缺点,在一定程度上可以说明你掌握的有点深入了
    如:知道Windows漏洞的,肯定对Windows很了解了
      

  48.   

    我感觉用LINQ 读取存储过程不太好用.有些不能像SQL语句那样拼写方便.强类型比较强大.
      

  49.   

    LINQ 本质上只是语法糖,实质上是在背后执行了你定义的delegate和泛型,不过 MS 为 LINQ 准备的 ORM 生成工具还是不错的。