浏览:195 2008-09-18 10:42 来自 天堂口      :

我最近接触LINQ的,觉得比ADO方便了很多,但是不知道效率上会不会有太大的差别,希望能够在这里得到更多的帮助,谢谢!

收藏 楼主
  2个月前 【组长】 Gray Zhang      :
欢迎欢迎
其实LINQ里的很多东西,都是我们原先在做的
举个简单的例子吧,就拿很觉的Where方法
平时我们经常这么写
foreach (ListItem item in checkBoxList.Items)
{
if (item.Checkced)
{
Debug.WriteLine(item.Value)
}
}
如果用LINQ呢
var checked = checkBoxList.Items.Where(item => item.Checked);
foreach (ListItem item in checked)
{
Debug.WriteLine(item.Value)
}
这就使得代码清晰了很多,事实上Where内部是基于yield的延迟加载的实现,效率和第一种写法是一样的

我们可以再来改造一下,自己扩展一个方法
public static void TakeAction<T>(this IEnumerable<T> list, Action<T> action)
{
foreach (T item in list)
{
action(item);
}
}
这就是一种简单的理念,通过扩展方法给IEnumerable<T>中的每个元素执行一个无返回值的方法
然后我们可以写得更简单
checkBoxList.Items.Where(item => item.Checked).TakeAction(item => Debug.WriteLine(item.Value));
这样更舒服了吧?
1楼 回到顶楼 
  2个月前  天堂口      :
@Gray Zhang
恩,看来得慢慢学习啊。。
2楼 回到顶楼 
  2个月前 【组长】 李永京      :
热烈欢迎~~
3楼 回到顶楼 
  2个月前  天堂口      :
@Gray Zhang
这个“item =>”里面的“=>”应该不是大于等于的意思吧,还是指向的意思,这个我不太会用呢。。。
4楼 回到顶楼 
  2个月前 【组长】 Gray Zhang      :
a => b
从箭头方向看,a进去b出来的意思
比如
item => item.Checked
就是说进去一个叫item的参数,出来一个bool值,取自item.Checked属性,至于item是什么类型,根据上下文进行泛型推断,是ListItem类型的
5楼 回到顶楼 
  2个月前  天堂口      :
@Gray Zhang
哦,哈哈,明白了
6楼 回到顶楼 

注册用户登录后才能回复,登录注册
> 返回“LINQ”


其他话题

相关内容

相关链接
1 39229