2011-12-21 8 views
1

LINQを初めて使用しています。私は、私はこの問題について移動する方法として混乱していますLINQでの集約

Name Subjects  Role 
---- --------  -------- 
A  Math, English Student 
B  Math, English Student 
C  Math   Student 
C  Math   Admin 

となる必要がある非常に愚かな問題で

Name Subjects Role 
---- -------- -------- 

A  Math  Student 
A  English  Student 
B  Math  Student 
B  English  Student 
C  Math  Student 
C  Math  Admin 

を立ち往生しています。これは、SQLでgroupby節を実行して、カンマ区切りの値を関数で取得できる単純な方法です。

誰かお手伝いできますか?

編集:3つの列は3つの異なるソースからのものです。結果の表を更新しました。事前にあなたの助けをありがとう!

答えて

1

はこれを試してみてください。

これが役に立ちます。

+0

ロールが同じでない場合は? – whihathac

+0

複数の列に 'GroupBy'を行う必要があります。コードを更新しました。今すぐチェックしてください –

+0

ありがとう@Abdul。私はEntityにLINQを使用していますが、LINQ PADでこのエラーが発生しています NotSupportedException:エンティティへのLINQがメソッドを認識しません 'System.String Aggregate [String、String](System.Collections.Generic.IEnumerable' System.String、System.String、System.String、System.String [System.String、System.String、System.String]) 'メソッドを使用して、このメソッドをストア式に変換することはできません。 – whihathac

2

私はあなたのコードを持っていないが、それは次のようになります。これは、カンマ区切りの文字列で、あなたの科目を配置します

var grouped = classes.GroupBy(g => new {Name = g.Name, Role = g.Role}).Select(
    s => 
    new 
     { 
      Name = s.Key, 
      Subjects = s.Select(x => x.Subject).Aggregate("", (current, se) => current + (", " + se)), 
      Role = s.Select(x => x.Role).First() 
     }); 

var result = grouped.Select(s => new 
            { 
             s.Name, 
             Subjects = s.Subjects.Substring(2), 
             s.Role 
            }).ToList(); 

var grouped = from element in yourList 
       group element by element.Name into g 
       select new 
       { 
        Name = g.Key, 
        Subjects = g.Select(e => e.Subject), 
        // Assuming they are identical when they have the same name 
        Role = g.First().Role 
       }; 
+0

ロールが同じでない場合は、 – whihathac

+0

@whihathacそれでは、私はあなたが何を期待しているかを知っています。一連のロールが必要な場合は、 'g.First()。Role'と' g.Select(e => e.Role) 'を交換します。また、カンマで区切った文字列として使用する場合は、 'string.Join'をローカルで使用するか、他の答え'集計 'で述べたように使用します。 –

+0

@whihathac私はあなたの結果テーブルを十分に見ていませんでした。 Abdulの言及として複数のグループを使用する。 –