2013-01-07 56 views
2

我有2列结构如下列表:如何找到一个列表列,并在其他行相同的值连接字符串为同一列值

50 process:3333 
50 phone:xxxx 
51 process:2222 
51 phone:yyyy 

我需要建立一个新的列表基于对第一个采用这种结构:

50 process:3333,phone:xxxx 
51 process:2222,phone:yyyy 

名单是否有任何方法从一列找到一个相同的值,并连接在第二列的字符串。

或者我必须找到一种方法来使用foreach或while语句手动执行它?

+0

,你可以参考DataBound事件和2属性:DataKeys和的DataKeyNames。希望这可以帮助 – ducnh

+0

这是什么类型的应用程序? ASP,WPF,WinForms,控制台?什么是您使用的实际控制类型? –

回答

4

假设一个简单的结构像...

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.GroupByString.Join

var procIdGroupList = procList 
    .GroupBy(p => p.ID) 
    .Select(g => new Proc 
    { 
     ID = g.Key, 
     Value = string.Join(",", g.Select(p => p.Value)) 
    }).ToList(); 

DEMO

0

找到了一个解决办法:在asp.net网页的GridView控件

//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(); 
相关问题