1:
Linq 性能优化
我查了一些资料 说 linq 某些函数(比如grouy by)可以预载一些数据 
比如 var query = from t in tab select t group by t.cate
当执行一些命令 比如foreach count 才会真正的执行 
但是这都只是linq to sql 的 想问问 有没有相关的文章介绍linq是如何优化的
还有就想问问 lamba表达式 和这有关系么?我觉得和linq差不多哎2:
IEnumerable 和 IQueryable 区别
我是找了个帖子http://stackoverflow.com/questions/252785/what-is-the-difference-between-iqueryablet-and-ienumerablet 但是不太明白
里头说 IQueryable  继承IEnumerable  但是多了2个属性 (一个是provider 一个是算是表达形式吧 我理解就是把数据放到何种数据结构中优化查询)

解决方案 »

  1.   

    1 延迟执行
    编译运行的时候会在最后生成sql语句执行查询,比如你写了多个查询,也只生成一条sql语句
    2 我理解的就是形式不同而已
      

  2.   

    1、是的,linq是延迟执行的,只有后面用到才执行,lambda跟linq一样,只是写法不一样而已;
    2、IQueryable继承IEnumerable接口,增加里几个属性,具体可以参考MSDN
    http://msdn.microsoft.com/zh-cn/library/bb351562.aspx
      

  3.   

    1. 其实Linq如果想要高性能,水还是挺深的。
    2. 我也不是太明白,大概基本就是IEnumerable只是对内存对象进行query,想List<T>, Array等。IQueryable 可以对外部资源进行Query,像数据库。如果query外部资源,通过属性query provider进行。query的时候会把query expression翻译成外部资源可以执行的语句,就像Entity Framework,就会把linq保存成Query Expression,然后执行的时候翻译成sql 语句,在数据库中执行。
      

  4.   

    1、linq to sql 系列之 linq to sql性能优化技巧 
    http://www.cnblogs.com/yukaizhao/archive/2010/05/21/linq-to-sql-10-performance-tips.html
    LinQ是必须学好的一种查询语言,就像sql一样的查询语言,linq查询中可以使用lamba表达式。例如:
    int[] arrTest = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
    var temp = from arr in arrTest
        where arr  < 5 orderby arr 
        select arr ;与var temp = arrTest.Where(p=> p<5).Select(p => p).OrderBy(p=>p);是等价的,且p=> p<5为lamba表达式
      

  5.   

    IEnumberalb使用的是LINQ to Object方式,它会将AsEnumerable()时对应的所有记录都先加载到内存,然后在此基础上再执行后来的Query。
      

  6.   

     IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。