在选择和Lambda中的位置之间进行选择

时间:2014-06-19 17:53:13

标签: c# model-view-controller lambda

有什么区别:

var UR = context.UserResearches.Select(c => c.SessionID == SessionID).First();

var UR = context.UserResearches.Where(c => c.SessionID == SessionID).First();

2 个答案:

答案 0 :(得分:4)

Select将一个序列映射到另一个序列 - 在每个项目上调用时返回包含lambda表达式结果的序列:

var UR = context.UserResearches.Select(c => c.SessionID == SessionID).First();

这将获得类似{ False, False, False, True, False, False }的序列,然后返回该序列中的第一项。


另一方面,

Where将过滤一个序列,只返回lambda表达式求值为True的那些元素:

var UR = context.UserResearches.Where(c => c.SessionID == SessionID).First();

这将获得一系列UserResearch个对象,其中只包含那些SessionID == SessionID然后返回该序列中第一个项目的对象。

注意:Linq使用lazy evaluation,因此First将导致它在找到第一个元素后停止评估序列的其余部分。

答案 1 :(得分:0)

Where

将选择与SessionID匹配的所有UserResearch

Select

将创建一个布尔结果列表。该列表中的每个bool值将用于每个UserResearch,如果它们与SessionID匹配