正确的 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
。
- 还有其他方法可以得到
Users
吗?
- 知道我想要
Object-X
,但只知道 Navigation
属性 的值,我应该如何考虑编写表达式?
- 我是不是应该这样想:"Get
Object-Y where It's Id is this, then give me Object-X
"
- 还是别的?
我问是因为我习惯这样想:"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));
我一直在尝试搜索 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
。
- 还有其他方法可以得到
Users
吗? - 知道我想要
Object-X
,但只知道Navigation
属性 的值,我应该如何考虑编写表达式?- 我是不是应该这样想:"Get
Object-Y where It's Id is this, then give me Object-X
" - 还是别的?
- 我是不是应该这样想:"Get
我问是因为我习惯这样想:"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));