2011-04-29 67 views
3

我有一个LINQ查询我的XML文件,它看起来像这样查询XML文件

IEnumerable<XElement> c = from cli in xEl.Elements(ns + "client") 
             where cli.Element(ns+"ID").Value == (((Client)cComboBox.SelectedItem).Id +"") 
             select cli; 

它工作正常.. 接下来我要重复的数据,所以我这样做

  foreach (XElement el in c) 
      { 

      } 

我的XML文件看起来像这样

<client> 
    <ID>1</ID> 
    <name>Andrej</name> 

通过迭代,我想提取的客户价值(ID - > ,名称 - >安德烈

我的猜测是把el.Element("name").Value在循环的中间,但还是不行...... 噢,顺便说一句:我在做这个C#..

我该怎么办?

btw2:你可以看到我是新来的LINQ所以我觉得我的方式偏离了轨道与这一个...

任何帮助将appriciated! TNX!

+0

对不起刚清楚你想获得id = 1或id => 1的元素吗? – Johnv2020 2011-04-29 12:35:43

回答

2

如果我用这个代码:

public void Run() 
    { 
     string fileToLoad = this.GetType().Name + ".xml"; 

     XElement root = XElement.Load(fileToLoad); 

     var selected = from cli in root.Elements("client") 
      where cli.Element("ID").Value == "1" 
      select cli; 

     System.Console.WriteLine("Selected:"); 
     foreach (var d in selected) 
      Console.WriteLine("{0}", d.ToString()); 

     System.Console.WriteLine("\nitems:"); 
     foreach (var d in selected) 
     { 
      Console.WriteLine("id: {0}", d.Element("ID")); 
     } 
    } 

而这个源数据:

<root> 
    <client> 
    <ID>1</ID> 
    <name>Andrej</name> 
    </client> 
    <client> 
    <ID>2</ID> 
    <name>William</name> 
    </client> 
    <client> 
    <ID>3</ID> 
    <name>Kate</name> 
    </client> 
</root> 

然后......我得到这样的结果:

Selected: 
<client> 
    <ID>1</ID> 
    <name>Andrej</name> 
</client> 

items: 
id: <ID>1</ID> 
1

你可以在一个声明中做到这一点。我在解释你的陈述。只有选择真的改变。

var nameIdList = (from cli in client 
where cli.ID == ID 
select new { id=cli.ID, name=cli.name }).ToList(); 
+0

另外我有一个问题,我有XmlNodes,需要转换为XmlElements。以下是如何将其添加到Extensions类的好链接。 http://blogs.msdn.com/b/ericwhite/archive/2008/12/22/convert-xelement-to-xmlnode-and-convert-xmlnode-to-xelement.aspx – JPM 2011-07-22 20:02:47