在连接 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();