2011-04-15 57 views
1

我有以下代码:C#XML到LINQ多个元素具有相同的名称,如何让他们在同一个对象保存

_logs.AddRange(elements 
        .Select(log => new Log() 
         { 
          tid = (log.Element("tid") == null) ? "" : log.Element("tid").Value, 
          zid = (log.Element("zid") == null) ? "" : log.Element("zid").Value, 
          create = (log.Element("create") == null) ? "" : log.Element("create").Value, 
          data = (log.Element("data") == null) ? null : log.Elements("data") 
          .Select(x => new Data() 
          { 
           data = (log.Element("data") == null) ? "" : log.Element("data").Value 

          }).ToList() 
         })); 

数据元素多次表明了每个对象。为什么当它读取这些对象时,它显示x具有正确的数据,但是当我查看_log时,它只显示第一个值。

例如,如果数据是这样的:

<data>1</data> 
<data>2</data> 
<data>3</data> 

所以那么数据列表将显示[0] = 1,[1] = 1,[2] = 1

由于

回答

1

Select()是关闭的,你现在只是选择第一项的值全部结束,而不是这样做:

.Select(x => new Data() 
{ 
    data = x.Value 
}).ToList() 

你也不需要最初的null检查 - 如果没有数据元素它将只是一个枚举零项,所以这将工作:

data = log.Elements("data").Select(x=> new Data() { data = x.Value }).ToList() 
相关问题