检索项目列表,如果项目存在于其中一个项目列表中

本文关键字:项目 列表 一个 于其中 如果 存在 检索 | 更新日期: 2023-09-27 18:14:48

请原谅标题有些混乱。我有一个模型(项目),其中包含一个项目列表(用户)。

我想检索所有项目,其中当前用户是该项目用户列表的成员。

我试过:

List<Project> _MemberProjects =
                    _Db.Projects.Where(p =>
                         p.Users.Contains(_User)
                    ).ToList();

这会导致以下错误:

Unable to create a constant value of type 'Nimble.Models.UserAccount'. Only primitive types or enumeration types are supported in this context.
用户模式:

public class UserAccount
{
    public int UserID { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public string Email { get; set; }
    public ICollection<Project> Projects{....}
}
项目模型

public class Project
{
    public int ProjectID { get; set; }
    public DateTime CreatedDate { get; set; }
    public string ProjectName { get; set; }        
    public string Owner { get; set; }       
    public ICollection<UserAccount> Users{...}
    public ICollection<ProjectGroup> Groups{...}
}

检索项目列表,如果项目存在于其中一个项目列表中

还没有试过,但它可能工作:

List<Project> _MemberProjects =
                _Db.Projects.Where(p =>
                     p.Users.Any(u => u.UserID == _User.UserID )
                ).ToList();

问题是您将Linq (WHERE子句)和非Linq Collection操作(Contains)混合在一起。尝试使用纯Linq。詹姆斯·邦德的答案可能管用。

您正在查询数据库吗?那么JOIN可能是另一种解决方案,但确切的语法取决于您如何存储两个表之间的关系。