在连接 LINQ 中使用多个条件。我,我和
Use multiple conditions in join LINQ. i,e AND
如何在 LINQ 连接中使用多个条件,即在我的场景中,我需要从 table 用户获取所有用户,其中组 ID = 4 来自 table UserInGroup,其中 UserInGroup 是中间 table 在用户和组 table 之间,如 SQL-T 我们使用 join as
select *
from user
where user.userID = userIngroup.userID AND userIngroup.groupID == 4
....
在另一种方法中,我将 lambda 表达式与 LINQ 一起使用,如何在以下方法中应用 where groupID = 4?
public IEnumerable<User> GetUsersByGroupID(int _groupID)
{
List<User> _listedUsersByGroupID = new List<User>();
using(var _uow = new UserManagement_UnitOfWork())
{
_listedUsersByGroupID = (from _users in _uow.User_Repository.GetAll()
.Include(s=>s.UserInGroup.Select(r=>r.Group))
select _users).ToList();
return _listedUsersByGroupID;
}
}
用户模型
[Table("User")]
public class User
{
public User() { }
[Key]
public int UserID { get; set; }
[StringLength(250)]
[Required]
public string FirstName { get; set; }
[StringLength(250)]
[Required]
public string LastName { get; set; }
[Required]
public int Age { get; set; }
[StringLength(250)]
[Required]
public string EmailAddress { get; set; }
public ICollection<UserInGroup> UserInGroup { get; set; }
}
UserInGroup 模型
[Table("UserInGroup")]
public class UserInGroup
{
public UserInGroup() { }
[Key]
public int UserGroupID { get; set; }
[Required]
public int UserID { get; set; }
[Required]
public int GroupID { get; set; }
public User User { get; set; }
public Group Group { get; set; }
}
群模型
public class Group
{
public Group() { }
[Key]
public int GroupID { get; set; }
[StringLength(250)]
[Required]
public string GroupName { get; set; }
public ICollection<UserInGroup> UserInGroup { get; set; }
}
Lambda 查询类似于:
ctx.User.Where(user=>
ctx.UserInGroup.Any(userIngroup=>
user.userID == userIngroup.userID && userIngroup.groupID == 4
)
)
然而,这只是查询,如果您想获得结果,请添加 .AsList() 或 .AsEnumerable() 以结束。
但是,如果您不完全理解自己在做什么,您可能会编写愚蠢且低效的代码。我建议您试试这个:
var publications = ctx.Database.SqlQuery<UserResults>(String.Format(@"
select UserID, FirstName,LastName,Age,EmailAddress,UserInGroup
from user
where user.userID = userIngroup.userID AND userIngroup.groupID == {0}
order by UserID
", Config.Group));
其中Config.Group为4;如果您不需要其他字段,UserResults 也可以是 User table。您需要执行或枚举 sql 查询以使用数据,然后才能使用 .AsList() 或 .AsEnumerable()为此。
变量ctx是数据库上下文。例如:
using (var ctx = new toxicEntities())
{
}
您只需要添加一个条件来过滤属于组 4 的用户。试试这个:
_listedUsersByGroupID = (from _user in _uow.User_Repository.GetAll()
.Include(s=>s.UserInGroup.Select(r=>r.Group))
where user.UserInGroup.Any(ug=>ug.groupID==4)
select _user).ToList();
如何在 LINQ 连接中使用多个条件,即在我的场景中,我需要从 table 用户获取所有用户,其中组 ID = 4 来自 table UserInGroup,其中 UserInGroup 是中间 table 在用户和组 table 之间,如 SQL-T 我们使用 join as
select *
from user
where user.userID = userIngroup.userID AND userIngroup.groupID == 4
....
在另一种方法中,我将 lambda 表达式与 LINQ 一起使用,如何在以下方法中应用 where groupID = 4?
public IEnumerable<User> GetUsersByGroupID(int _groupID)
{
List<User> _listedUsersByGroupID = new List<User>();
using(var _uow = new UserManagement_UnitOfWork())
{
_listedUsersByGroupID = (from _users in _uow.User_Repository.GetAll()
.Include(s=>s.UserInGroup.Select(r=>r.Group))
select _users).ToList();
return _listedUsersByGroupID;
}
}
用户模型
[Table("User")]
public class User
{
public User() { }
[Key]
public int UserID { get; set; }
[StringLength(250)]
[Required]
public string FirstName { get; set; }
[StringLength(250)]
[Required]
public string LastName { get; set; }
[Required]
public int Age { get; set; }
[StringLength(250)]
[Required]
public string EmailAddress { get; set; }
public ICollection<UserInGroup> UserInGroup { get; set; }
}
UserInGroup 模型
[Table("UserInGroup")]
public class UserInGroup
{
public UserInGroup() { }
[Key]
public int UserGroupID { get; set; }
[Required]
public int UserID { get; set; }
[Required]
public int GroupID { get; set; }
public User User { get; set; }
public Group Group { get; set; }
}
群模型
public class Group
{
public Group() { }
[Key]
public int GroupID { get; set; }
[StringLength(250)]
[Required]
public string GroupName { get; set; }
public ICollection<UserInGroup> UserInGroup { get; set; }
}
Lambda 查询类似于:
ctx.User.Where(user=>
ctx.UserInGroup.Any(userIngroup=>
user.userID == userIngroup.userID && userIngroup.groupID == 4
)
)
然而,这只是查询,如果您想获得结果,请添加 .AsList() 或 .AsEnumerable() 以结束。
但是,如果您不完全理解自己在做什么,您可能会编写愚蠢且低效的代码。我建议您试试这个:
var publications = ctx.Database.SqlQuery<UserResults>(String.Format(@"
select UserID, FirstName,LastName,Age,EmailAddress,UserInGroup
from user
where user.userID = userIngroup.userID AND userIngroup.groupID == {0}
order by UserID
", Config.Group));
其中Config.Group为4;如果您不需要其他字段,UserResults 也可以是 User table。您需要执行或枚举 sql 查询以使用数据,然后才能使用 .AsList() 或 .AsEnumerable()为此。
变量ctx是数据库上下文。例如:
using (var ctx = new toxicEntities())
{
}
您只需要添加一个条件来过滤属于组 4 的用户。试试这个:
_listedUsersByGroupID = (from _user in _uow.User_Repository.GetAll()
.Include(s=>s.UserInGroup.Select(r=>r.Group))
where user.UserInGroup.Any(ug=>ug.groupID==4)
select _user).ToList();