Linq to entities 在带有OR子句的Linq 2实体中使用Where方法

Linq to entities 在带有OR子句的Linq 2实体中使用Where方法,linq-to-entities,Linq To Entities,我想在Linq 2实体中使用Where方法,它将等于 userRepository.Users.Where(u=>u.RoleID == 1 || u=>u.RoldID == 2).Select(o => new SelectListItem { Text = o.Role.RoleName, Value = o.RoleID.ToString() }).ToList(); 当然,问题在于其中(u=>u.RoleID==1 | | u=>u.RoldID==2) 问题是我不

我想在Linq 2实体中使用Where方法,它将等于

userRepository.Users.Where(u=>u.RoleID == 1 || u=>u.RoldID == 2).Select(o => new SelectListItem { Text = o.Role.RoleName, Value = o.RoleID.ToString() }).ToList();
当然,问题在于其中(u=>u.RoleID==1 | | u=>u.RoldID==2)

问题是我不知道如何在WHERE子句中使用WHERE方法

任何想法(上面的代码当然不会编译lambda表达式的b/c)

userRepository.Users返回用户实体的列表


我想可以使用.Where().Where()的串联来完成,但我需要一个OR。

只需删除额外的u=>

Where(u => u.RoleID == 1 || u.RoleID == 2).
在代码中,您尝试“或”lambda,“lambda1或lambda2”,这是不可能的,正如您所注意到的。 但是,您可以在lambda中使用“或”表达式:

lambda(表达式1或表达式2)

将代码解读为:

(用户) { 返回user.RoleId==1 | | user.RoleId==2; }

如果这能让事情更清楚的话


另外,我猜您在最后一部分“u.RoldId==2”上有一个拼写错误,而不是RoleId.

只需删除多余的u=>

Where(u => u.RoleID == 1 || u.RoleID == 2).
在代码中,您尝试“或”lambda,“lambda1或lambda2”,这是不可能的,正如您所注意到的。 但是,您可以在lambda中使用“或”表达式:

lambda(表达式1或表达式2)

将代码解读为:

(用户) { 返回user.RoleId==1 | | user.RoleId==2; }

如果这能让事情更清楚的话


另外,我猜您在最后一部分“u.RoldId==2”上有一个拼写错误,而不是RoleId..

其中使用了通用匿名委托,在本例中为Func

这意味着:“给定一个用户返回一个布尔值”,或者“给定一个用户,提供一个标准来确定我是否应该选择该用户”

对于lambda表达式,只需定义“给定”的变量一次

基本语法是

variableName => expression
在这种情况下,我们有

u => (expression)
其中u是用户,而(表达式)是计算结果为布尔值的表达式

Where(u => (u.RoleID==1 || u.RoleID==2))
(正如罗杰在我完成这篇文章时指出的那样,这是正确的答案)

进行AND或任何其他逻辑比较都是完全相同的

Where(u=> u.Name.Equals(userName) && u.Email.Equals(email))
你可以有任何表达式,唯一的要求是它返回一个布尔值。即使一个表达式忽略了你给定的变量也可以

Where(u=> true)
这将选择所有用户,而演示lambda表达式的结构可能毫无意义


编辑:没有看到罗杰的编辑提供的其他信息,这些信息可能比我更好地解释了这一点,直到我发表这篇文章,抱歉重复。

其中使用了通用匿名委托,在本例中为Func

这意味着:“给定一个用户返回一个布尔值”,或者“给定一个用户,提供一个标准来确定我是否应该选择该用户”

对于lambda表达式,只需定义“给定”的变量一次

基本语法是

variableName => expression
在这种情况下,我们有

u => (expression)
其中u是用户,而(表达式)是计算结果为布尔值的表达式

Where(u => (u.RoleID==1 || u.RoleID==2))
(正如罗杰在我完成这篇文章时指出的那样,这是正确的答案)

进行AND或任何其他逻辑比较都是完全相同的

Where(u=> u.Name.Equals(userName) && u.Email.Equals(email))
你可以有任何表达式,唯一的要求是它返回一个布尔值。即使一个表达式忽略了你给定的变量也可以

Where(u=> true)
这将选择所有用户,而演示lambda表达式的结构可能毫无意义


编辑:没有看到罗杰的编辑提供的其他信息,这些信息可能比我更好地解释了这一点,直到我写了这篇文章,很抱歉重复了。

谢谢,这么简单,但是,谁知道…;-)编辑中有打字错误。。我重写以删除枚举,并将其缩短。但是额外的u=>是问题所在。谢谢,这么简单,但是,谁会知道…;-)打字错误在编辑中。。我重写以删除枚举,并将其缩短。但是额外的u=>是问题所在。