C# Linq c中的单列分组
我有一个如下表:我需要显示它没有重复。所以我需要单独按客户分组。c1有两个“名称”C# Linq c中的单列分组,c#,linq,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())
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上的两个“名称”。如果我理解正确,您希望按客户分组,并以逗号分隔名称。我创建了您的示例数据,并用查询语法编写了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);
}
它的演示
所以你的代码应该是这样的
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();
}
}
Customer=a.id,首先应该是Customer=a.Customer。然后需要在groupby之后进行选择:Selectg=>new{Customer=g.Key,Names=g.Selectgg=>gg.Name}省略fistordefault。。只需在groupby之后填写toList