初学c# 遇到的一点小问题

u010314930 2013-04-16 05:42:28
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 一个是算是表达形式吧 我理解就是把数据放到何种数据结构中优化查询)
...全文
117 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
三五月儿 2013-04-16
  • 打赏
  • 举报
回复
IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。
三五月儿 2013-04-16
  • 打赏
  • 举报
回复
IEnumberalb使用的是LINQ to Object方式,它会将AsEnumerable()时对应的所有记录都先加载到内存,然后在此基础上再执行后来的Query。
三五月儿 2013-04-16
  • 打赏
  • 举报
回复
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表达式
宝_爸 2013-04-16
  • 打赏
  • 举报
回复
1. 其实Linq如果想要高性能,水还是挺深的。 2. 我也不是太明白,大概基本就是IEnumerable只是对内存对象进行query,想List<T>, Array等。IQueryable 可以对外部资源进行Query,像数据库。如果query外部资源,通过属性query provider进行。query的时候会把query expression翻译成外部资源可以执行的语句,就像Entity Framework,就会把linq保存成Query Expression,然后执行的时候翻译成sql 语句,在数据库中执行。
gxingmin 2013-04-16
  • 打赏
  • 举报
回复
1、是的,linq是延迟执行的,只有后面用到才执行,lambda跟linq一样,只是写法不一样而已; 2、IQueryable继承IEnumerable接口,增加里几个属性,具体可以参考MSDN http://msdn.microsoft.com/zh-cn/library/bb351562.aspx
Justin-Liu 2013-04-16
  • 打赏
  • 举报
回复
1 延迟执行 编译运行的时候会在最后生成sql语句执行查询,比如你写了多个查询,也只生成一条sql语句 2 我理解的就是形式不同而已

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧