Linq to entities 在带有OR子句的Linq 2实体中使用Where方法
我想在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) 问题是我不
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=>是问题所在。