请原谅这个有点令人困惑的标题。我有一个模型(项目),其中包含项目列表(用户)。
我想检索所有项目,其中当前用户是该项目的用户列表的成员。
我试过了:
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{...}
}
答案 0 :(得分:3)
没试过,但可能会有效:
List<Project> _MemberProjects =
_Db.Projects.Where(p =>
p.Users.Any(u => u.UserID == _User.UserID )
).ToList();
答案 1 :(得分:1)
问题是你将Linq(WHERE子句)和非Linq Collection操作(Contains)混合在一起。尝试使用纯Linq。 @ JamesBond的回答可能有用。
您在查询数据库吗?然后JOIN可能是另一种解决方案,但确切的语法取决于您如何存储两个表之间的关系。