使用不带 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();