2012-03-01 71 views
0

我知道關於這個主題有幾個問題。然而;我找不到與我的問題直接相關的問題。LINQ獲取不同的值

我有一個數據庫中的3表和PK從這3個表中形成一個複合PK在XRef表中。

我需要能夠根據2個鍵來選擇不同的項目,以便在報表上顯示。

public IEnumerable<AssemblyPrograms> GetProgramAssemblies() 
    { 
     var assembliesList = (from c in eModel.Assemblies.ToList() 
          join d in eModel.Programs_X_Assemblies_X_Builds 
          on c.AssemblyID equals d.AssemblyID 
          join p in eModel.Programs 
          on d.ProgramID equals p.ProgramID 
          join a in eModel.AssemblyTypes 
          on c.AssemblyTypeID equals a.AssemblyTypeID 

          select new AssemblyPrograms 
          { 
           AssemblyID = c.AssemblyID 
           ,ProgramID = d.ProgramID 
           ,AssemblyName = c.AssemblyName 
           ,AssemblyPrefixName = c.AssemblyPrefixName 
           ,ProgramName = p.ProgramName 
           ,AssemblyTypeName = a.AssemblyTypeName 
           ,AssemblyTypeID = a.AssemblyTypeID 
          }); 

     return assembliesList; 
    } 

這是我的查詢,我需要拉出表

在我的外部參照表我有AssemblyID,ProgramID和BuildID我的複合PK。

從AssemblyID到ProgramID可以有多種關係。 BuildID是分離它們的關鍵。

我需要將Distinct AssemblyID拉到我的報表的ProgramID關係中,BuildID可以忽略。

我試過.Distinct()在我的查詢和其他一些事情無濟於事。

我會很感激任何人都可以給我的幫助。

謝謝

回答

2

接受自定義相等比較器的不同重載如何?類似這樣的:

class AssemblyComparer : EqualityComparer<AssemblyPrograms> { 
    public override bool Equals(AssemblyPrograms x, AssemblyPrograms y) { 
     return x.ProgramID == y.ProgramID && x.AssemblyID == y.AssemblyID; 
    } 

    public override int GetHashCode(AssemblyPrograms obj) { 
     return obj.ProgramID.GetHashCode()^obj.AssemblyID.GetHashCode(); 
    } 
} 
+0

這就像一個魅力。非常感謝你的快速回答。 – Squeal 2012-03-02 14:02:19