2012-03-01 11 views
0

このトピックに関するいくつかの質問があります。しかしながら;自分の問題に直接関係するものは見つけられません。LINQの固有値の取得

DBに3つのテーブルがあり、それらの3つのテーブルのPKがXRefテーブルの複合PKを形成します。

レポートに表示するために2つのキーに基づいてDistinct項目を選択する必要があります。

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; 
    } 

これは私のクエリと私は私の外部参照テーブルでは、テーブル

から撤退する必要があり、私は私の複合PKとしてAssemblyID、プログラムIDとBuildIDを持っています。

AssemblyIDからProgramIDまでの多対多の関係があります。 BuildIDは、それらを区切るキーです。

レポートのProgramIDリレーションシップにDistinct AssemblyIDをプルする必要がありますが、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

関連する問題