2016-04-22 12 views
2

私は以下のようなテーブルを持っています:私は重複なしでそれを表示する必要があります。だから私は顧客だけでグループ化する必要があります。 c1に「名前」がありますLinqの単一列によるグループC#

Id Name customer 
1 XXXX  c1 
2 YYYY  c1 

私はc1:xxx、yyyの値を取得する必要があります。しかし、それはc1:xxxとc1:yyyとなっています。
私のコードは次のようになります。このことから

public List<data> GetComponentStatus() 
{ 
    List<data> d= null; 
    using(var entity=new FM()) 
    { 
     d = entity.getdata() 
      .Select(
       a => new data 
       { 
        Customer = a.id, 
        Name = a.name, 
       }) 
      .GroupBy(a=>a.Customer).Select(a=>a.FirstOrDefault()).ToList(); 
    } 
    return d; 
} 

、()LastorDefaultを使用しているとき、私は最初のレコードまたは最後のレコードを取得しています。

私は単一の顧客C1に「名前」を両方取得したいと考えています。

+0

'カスタマー= a.idのように、' 'スターターのカスタマー= a.customer'する必要がありますする必要があります。次に、groupbyの後ろで選択する必要があります: 'Select(g => new {Customer = g.Key、Names = g.Select(gg => gg.Name)})' – Rob

+0

fistordefault()を省略します。 )グループバイ後 –

答えて

0

私が正しく理解した場合は、Customerでグループ化し、Nameをコンマで区切りたいとします。あなたのサンプルデータを作成し、クエリ構文でLINQを書きました。下記のrextesterのデモ出力を参照してください。 rextester

var data = new[] { new {ID = 1,Name = "XXXX", customer= "C1"}, 
          new {ID = 2,Name = "YYYY", customer= "C1"}, 
         }; 

     var query = from a in data 
        group a by a.customer into grp 
        select new {Cutomer= grp.Key ,Name = string.Join(",",grp.Select (g => g.Name)) }; 

     foreach (var e in query) 
     { 
      Console.WriteLine("Customer: {0} ,Name: {1}", e.Cutomer,e.Name); 
     } 

そのデモは、だからあなたのコードは、この

public List<data> GetComponentStatus() 
    { 

     using(var entity=new FM()) 
     { 
      var d = from a in entity.getdata() 
         group a by a.customer into grp 
         select new data {Cutomer= grp.Key ,Name = string.Join(",",grp.Select (g => g.Name))}; 

       return d.ToList(); 
     } 

    } 
関連する問題