lamda表达式中的 Select和Where有什么区别?

king520520 2010-09-29 01:09:41
lamda表达式中的 Select和Where有什么区别?

集合.Select(p=>p.ID==id)
集合.Where(p=>p.ID==id)
...全文
1850 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
种草德鲁伊 2010-09-29
  • 打赏
  • 举报
回复
和sql里的select和where是一样的。

list.Where(u => u.UserId > 0) 返回 UserId > 0 的列表项 结果是 IEnumerable<User>

list.Select( u.UserId ) 返回所有的UserId 结果是 IEnumerable<int>
CsToD 2010-09-29
  • 打赏
  • 举报
回复
select是“转换”
where是“条件”

IEumerable<T>

集合.Select(p=>p.ID==id)==>返回的是IEumerable<bool>,集合的数目不会改变,因为p.ID==id是bool值,如果你使用的是.Select(p=>p.ID)的话,就是IEumerable<int>了(跟ID是同一类型)
集合.Where(p=>p.ID==id)==>返回的仍然是IEumerable<T>,但是集合的数目可能变了

兔子-顾问 2010-09-29
  • 打赏
  • 举报
回复
例如

Point[] points = new Point[] { new Point(1, 1), new Point(2, 2)};
Console.WriteLine(points.Select(p => p.X == 1).First().GetType());//System.Boolean
Console.WriteLine(points.Where(p => p.X == 1).First().GetType());//System.Drawing.Point
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyazhe 的回复:]
Select(p=>p.ID==id)
这里选择的结果是通过p,访问迭代器,然后选取的是p.ID==id的结果,选择到的是bool对象
Where(p=>p.ID==id)
这里是过滤,p.ID==id的保留
[/Quote]
这个回答很详细。我不是很满意。

请笼统一些
兔子-顾问 2010-09-29
  • 打赏
  • 举报
回复
Select(p=>p.ID==id)
这里选择的结果是通过p,访问迭代器,然后选取的是p.ID==id的结果,选择到的是bool对象
Where(p=>p.ID==id)
这里是过滤,p.ID==id的保留
king520520 2010-09-29
  • 打赏
  • 举报
回复
这个回答很笼统。我不是很满意。

请详细一些
兔子-顾问 2010-09-29
  • 打赏
  • 举报
回复
select是选择,where是条件过滤。

111,129

社区成员

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

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

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