使用不带 Lambda 表达式的 LinQ 来定义列表类型的条件 属性
using LinQ without Lambda expressions to define condition on a List type property
我有以下 LinQ 表达式,它运行良好。但是,我想知道是否可以在不使用 Lambda 表达式和 Contains 的情况下编写相同的查询。另一种选择是什么?由于 Roles 是列表类型,我想不出其他方法。
var users = (from p in _db.People
where p.Roles.Select(r => r.RoleId).Contains(roleid)
select p).ToList();
更新 1:
我的意思是:不使用 Lambda、Contains、Select 等。
但仅使用 select、join、from、where 等
不是没有 lambda 表达式 - 这就是 linq 完成大部分繁重工作的方式。
您可以使用.Any(...)
var users =
(
from p in _db.People
where p.Roles.Any(r => r.RoleId == roleid)
select p
).ToList();
这应该会生成您想要的联接...
var users =
(
from p in _db.People
from r in p.Roles
where r.RoleId == roleid
select p
).ToList();
编辑:如果您没有定义关系,请尝试这个(未测试)...
var query = (from p in db.people
join r in db.roles on p.roleID equals r.roleID
where r.roleID = roleID
select p).ToList();
我有以下 LinQ 表达式,它运行良好。但是,我想知道是否可以在不使用 Lambda 表达式和 Contains 的情况下编写相同的查询。另一种选择是什么?由于 Roles 是列表类型,我想不出其他方法。
var users = (from p in _db.People
where p.Roles.Select(r => r.RoleId).Contains(roleid)
select p).ToList();
更新 1: 我的意思是:不使用 Lambda、Contains、Select 等。 但仅使用 select、join、from、where 等
不是没有 lambda 表达式 - 这就是 linq 完成大部分繁重工作的方式。
您可以使用.Any(...)
var users =
(
from p in _db.People
where p.Roles.Any(r => r.RoleId == roleid)
select p
).ToList();
这应该会生成您想要的联接...
var users =
(
from p in _db.People
from r in p.Roles
where r.RoleId == roleid
select p
).ToList();
编辑:如果您没有定义关系,请尝试这个(未测试)...
var query = (from p in db.people
join r in db.roles on p.roleID equals r.roleID
where r.roleID = roleID
select p).ToList();