正确的 LINQ 表达式

Proper LINQ Expression

我一直在尝试搜索 Google 但无济于事。感觉好像以前有人问过,但也许我没有谷歌搜索我认为我需要的正确内容。

我想获得 Object 的集合,谁是 ICollection<T>Id 属性 是 value

我应该用哪种方式编写这个 Linq 表达式?

例如:

public class User {
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Role> Roles { get; set; }
}

public class UserRole {
    public int UserId { get; set; }
    public int RoleId { get; set; }
}

如果我知道 RoleId,我如何获得所有 User?以下似乎是正确的,它确实给了我我需要的东西:

示例 1

var roleId = 1;
var users = db.UserRoles.SingleOrDefault(r => r.RoleId == roleId).Roles;

但是,有没有可能反过来得到相同的结果呢?例如,我试过这个:

示例 2

var roleId = 1;
var users = db.Users.Where(u => u.UserRoles.Where(r => r.RoleId == roleId)).Users;

我收到一条消息说 Cannot convert type UserRole to bool

我问是因为我习惯这样想:"Get `Object-X where it's Object-Y has this value"。

也许我把它弄糊涂了,但我希望有人能帮助解决这个问题。

If I know a RoleId, how do I get all the User's?

假设 Role class 有一个 RoleId 属性 你可以这样做:

var roleId = 1;
var users = db.Users.Where(q => q.Roles.Any(w => w.RoleId == roleId));