在Linq c#

时间:2016-04-22 05:10:44

标签: c# linq

我有一个如下表:我需要显示它没有重复。所以我需要单独为客户分组。 c1同时具有'名称'

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上同时获得“名称”。

1 个答案:

答案 0 :(得分: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(); 
        }

    }