2010-04-06 10 views
0

LINQ 별개의 필드는

return _dataContext.ProjectPictures.Include("Projects").Include("ProjectPictureTypes").Where(p => p.ProjectPictureTypes.Id == 1).ToList(); 

내가 지금까지 내가 당신이 ID가 1 인 "ProjectPictureTypes"와 연결된 모든 프로젝트를 원하는 이해

return _dataContext.ProjectPictures.Include("Projects").Include("ProjectPictureTypes").Where(p => p.ProjectPictureTypes.Id == 1).Distinct(p=>p.Projects.Id).ToList(); 
+0

할 것? 또한 많은 사람들이 한번에 포함시키지 않는 것이 좋으며, db clumsy에 대한 쿼리를 작성하십시오. – vittore

+0

무엇을 반환 하시겠습니까? 별개의 프로젝트 ID 목록 –

+0

하나의 필드로 구분되는 개체의 목록을 가져 오려고합니다. – kusanagi

답변

1

당신이 당신의 외래 키 관계가 데이터베이스에서 원하는 방식을 설정했다고 가정하고, 당신이 원하는 것처럼 LINQ - 투 - SQL 클래스가 정확히 그 관계를 반영한다고 가정이 보인다 뭔가 같은 :

DataContext.Projects 
    .Where(a => a.ProjectPictures.ProjectPictureType_ID == 1) 
    .Distinct() 
    .Select(a => a.Project_ID) 
    .ToList() 

나는 당신의 데이터베이스 구조는 다음과 같습니다 있으리라 믿고있어 :

Projects      ProjectPictures 
========      =============== 
Project_ID (PK, int)   ProjectPicture_ID (PK, int) 
           Project_ID (FK, int) 
           ProjectPictureType_ID (FK, int) 

ProjectPictureTypes 
=================== 
ProjectPictureType_ID (PK, int) 
0

같은 것을 필요로이 쿼리에 별개의 설정 방법에 대해 설명합니다.

내가 생각하기에 그룹화와 적절한 집계를 원할 수도 있습니다. 무엇이든간에. 그런 다음 p.Projects.Id의 그룹화는 p.Projects.Id와 다릅니다. 힘든 시간은 적절한 집계가 될 수 있습니다. 비즈니스 로직에 의미가 있다면 말이죠.

HTH

0

당신은 사용자 정의를 작성해야 할 것 IEqualityComparer 다음

public class ProjectPicturesComparer: IEqualityComparer<ProjectPictures> 
    { 
     // Products are equal if their names and product numbers are equal. 
     public bool Equals(ProjectPictures p, ProjectPictures p2) 
     { 
      return p.Projects.Id == p2.Projects.Id; 
     } 

     // If Equals() returns true for a pair of objects, 
     // GetHashCode must return the same value for these objects. 

     public int GetHashCode(ProjectPictures p) 
     { 
      // Calculate the hash code for the product. 
      return p.Projects.Id.GetHashCode(); 
     } 

    } 

당신은 당신이 여기 별개로 무엇을 원하는가

return _dataContext.ProjectPictures.Include("Projects").Include("ProjectPictureTypes").Where(p => p.ProjectPictureTypes.Id == 1)..Distinct(new ProjectPicturesComparer()).ToList()