适当的LINQ表达式

RoL*_*LLs 0 c# linq lambda linq-expressions

我一直试图搜索谷歌但无济于事.感觉就像以前被问过,但也许我不是在谷歌搜索我认为我需要的东西.

我想要得到的集合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; }
}
Run Code Online (Sandbox Code Playgroud)

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

例1

var roleId = 1;
var users = db.UserRoles.SingleOrDefault(r => r.RoleId == roleId).Roles;
Run Code Online (Sandbox Code Playgroud)

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

例2

var roleId = 1;
var users = db.Users.Where(u => u.UserRoles.Where(r => r.RoleId == roleId)).Users;
Run Code Online (Sandbox Code Playgroud)

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

  • 还有其他方法可以获得Users吗?
  • 知道我想要Object-X,但只知道一个Navigation属性的值,我该怎么想写这个表达式?
    • 我应该在想:"得到Object-Y where It's Id is this, then give me Object-X"
    • 或者是其他东西?

我问,因为我习惯这样思考:"获取`Object-X,其中Object-Y具有此值".

也许我让这个令人困惑,但我希望有人帮助澄清它.

kor*_*inp 5

如果我知道RoleId,我如何获得所有用户的?

假设Role类具有RoleId属性,您可以执行以下操作:

var roleId = 1;
var users = db.Users.Where(q => q.Roles.Any(w => w.RoleId == roleId));
Run Code Online (Sandbox Code Playgroud)