2016-04-22 29 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

omit fistordefault() )在groupby之后 –

回答

0

如果我理解正确,你想分组Customer并得到Name作为逗号分隔。我创建了你的样本数据,并在查询语法中编写了LINQ。请参阅下面的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); 
     } 

及其对rextester

演示所以,你的代码应该是这样的

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

    }