2010-04-06 84 views
0

如何設置不同的這個查詢LINQ不同領域

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

我需要這樣的東西

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

你想要什麼不同嗎?另外最好不要一次使用這麼多的包含,他們會向db笨拙地查詢 – vittore 2010-04-06 22:53:06

+0

您想要返回什麼?一個不同的項目ID列表? – 2010-04-06 22:54:15

+0

我想獲得一個字段不同的對象列表 – kusanagi 2010-04-06 23:30:45

回答

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

據我理解你想與「ProjectPictureTypes」裏的ID是1鏈接的所有項目。

據我看你可能想看看分組和適當的聚合 - 無論這是什麼。在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()