2017-10-02 10 views
0

多対多関係から複数のレコードを取得するGroupBy節の書き方は?LINQ - GroupBy多対多関係

私は構造を以下している:私はoccuring失敗を持っているので、もし私が何をしたいのか

public class Failure{ 
    public virtual int IdFailure { get; set; } 
    public virtual Workstation Workstation{ get; set; } 
} 

public class Workstation{ 
    public virtual int IdWorkstation { get; set; } 
    public virtual IList<WorksocketWorkstation> WorksocketWorkstation { get; set; } 
} 

public class WorksocketWorkstation{ 
    public virtual int IdWorksocketWorkstation{ get; set; } 
    public virtual Worksocket Worksocket{ get; set; } 
    public virtual Workstation Workstation{ get; set; } 
} 

public class Worksocket { 
    public virtual int IdWorksocket { get; set; } 
    public virtual IList<WorksocketWorkstation> WorksocketWorkstation { get; set; } 
} 

は、多対多の関係から得られた「重複」を含む関連Worksockets、によってグループの障害にありますワークステーションが3つのワークステーションに割り当てられているので、これらのワークステーションのそれぞれについて説明します。現在、私は私の結果を得るために、このようなものを使用しています:

GetFailures().GroupBy(g => g.Workstation.WorksocketWorkstation.FirstOrDefault().Worksocket.IdWorksocket) 

しかし、私はFirstOrDefaultを使用していることから、それぞれの障害は、単一Worksocketを占めています。私は代わりにSelectManyを使用しようとしましたか、既に答えられている同様の質問に基づいて、ワークステーション側からデータを取得しようとしましたが、アイデアの周りに私の頭を包んで私のニーズに合わせて調整することはできませんどんな助けや説明も高く評価されます。

+0

あなたが失敗からworkocketへの本当の関係を持っていないように見えます。たとえば、2つの異なるワークステーションに関連する2つの障害があるとします。あなたはいつそれらの失敗をグループ化したいですか?ワークステーションに少なくとも1つのワークステーションがある場合は、または、すべてのワークソケットを表示し、そのワークステーションに発生する可能性のあるすべての障害を入れたいとします。あなたが正確にわからないので、ちょうどかもしれません - あなたはワークステーションだけを知っています。 –

+0

現在見つからないナビゲーションプロパティを追加する 'public ICollection 失敗{get;セット; } ''を ''ワークステーション '側から始める必要がある場合、どのようにすればよいかを理解してください。 –

+0

@IvanStoevそれは私のプロジェクトにあります。私はここで簡潔にするために単純化しました。あなたは正しい - 私がそれを行うことを試みるならば、それはかなり必要だろうが、私の場合はそれが最後の解決策であり、可能ならばそれを避けたい。私は既に他のパラメータに基づいて失敗側と同様のグループ分けを行っています。 –

答えて

1
GetFailures().SelectMany(g => g.Workstation.WorksocketWorkstation) 
      .GroupBy(g => g.Worksocket.IdWorksocket) 
+0

それは動作します!どうもありがとう。 'SelectMany'を使ったときの私の間違いは、' GroupBy'節の中でそれをしようとしたことでした。 –