如何在列表列中找到相同的值,并在其他行上为相同的列值连接字符串
本文关键字:其他 字符串 连接 列表 | 更新日期: 2023-09-27 17:51:03
我有一个2列的列表,结构如下:
50 process:3333
50 phone:xxxx
51 process:2222
51 phone:yyyy
我需要在第一个列表的基础上用这个结构建立一个新的列表:
50 process:3333,phone:xxxx
51 process:2222,phone:yyyy
List是否有任何方法可以从一列中找到相同的值并将其连接到第二列上?
或者我必须找到一种方法来手动使用foreach或while语句?
假设一个简单的结构体,如…
public struct Proc
{
public int ID { get; set; }
public string Value { get; set; }
}
和你的样本数据:
var procList = new List<Proc>() {
new Proc{ID=50,Value="process:3333"},new Proc{ID=50,Value="phone:xxxx"},
new Proc{ID=51,Value="process:2222"},new Proc{ID=51,Value="phone:yyyy"},
};
您可以使用Enumerable.GroupBy
和String.Join
:
var procIdGroupList = procList
.GroupBy(p => p.ID)
.Select(g => new Proc
{
ID = g.Key,
Value = string.Join(",", g.Select(p => p.Value))
}).ToList();
已找到解决方法:
//Recupera valores dos indices para o tipo de documento
List<Gedi.Models.OperacoesModel.imports> valuesList = new List<Gedi.Models.OperacoesModel.imports>();
var valuesListObj = from a in context.sistema_Documentos
join b in context.sistema_Indexacao on a.id equals b.idDocumento
join c in context.sistema_Indexes on b.idIndice equals c.id
where a.ativo == 1
select new
{
id = a.id,
values = c.idName + ":" + b.valor
};
var çist = (from x in valuesListObj.AsEnumerable()
select new Gedi.Models.OperacoesModel.imports
{
id = x.id,
values = x.values
}).ToList();
var importList = çist.GroupBy(p => p.id).Select(g => new Gedi.Models.OperacoesModel.imports
{
id = g.Key,
values = string.Join(",", g.Select(p => p.values))
}).ToList();