2013-05-21 5 views
0

약간 혼동스러운 제목을 사용하십시오. 나는 항목 (사용자)의 목록을 포함하는 모델 (프로젝트)을 가지고있다.항목 목록 중 하나에 항목이있는 항목 목록 검색

현재 사용자가 해당 프로젝트의 사용자 목록에 속한 모든 프로젝트를 검색하고 싶습니다.

나는 시도했다 :

이 다음과 같은 오류가 발생
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

사용자가 Guid, Int 또는 기타 기본 유형 인 Id를 가지고 있습니까? 그렇다면 ID를 비교하여 사용자를 조회하십시오. –

+0

@JamesBlond 예, 사용자 모델을 1 초 게시합니다. – Jack

+0

모델에 따라 Contains() 대신 Any()를 사용하고 사용자 대신 INT UserID를 비교하는 대답이 추가되었습니다. –

답변

3

이 시도하지 않은,하지만 그것은 작동 있습니다

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

효과가 있습니다. 감사! – Jack

1

문제는 당신이 함께 Linq에 (WHERE 절) 및 비 Linq를 수집 작업을 (포함) 혼합되어 있다는 점이다. 순수 Linq를 사용해보십시오. @ JamesBond의 대답이 효과가있을 수 있습니다.

데이터베이스를 쿼리하고 있습니까? 그런 다음 JOIN이 다른 솔루션 일 수 있지만 정확한 구문은 두 테이블 간의 관계를 저장하는 방법에 따라 다릅니다.