在Windows Phone上使用linq创建对象

时间:2011-11-21 13:37:12

标签: linq-to-xml

这是我正在使用的xml示例:

<?xml version="1.0" encoding="UTF-8"?>
...
<tbody>
<tr class="group">

<td class="team"><span>1</span> <a href="link">Jeans</a></td>
<td class="a">
<p>10</p>
</td>
<td class="b">
<p>20</p>
</td>
<td class="team"><span>1</span> <a href="link">T-shirt</a></td>
<td class="a">
<p>20</p>
</td>
<td class="b">
<p>20</p>
</td>
</tr>

我需要创建一个对象并使用来自xml的数据填充它。 我已经上了所有需要的属性的类,我使用这个linq代码来读取xml:

var searched = from c in xml.Descendants("tbody").Descendants("tr").Descendants("td").Descendants("a")
                           from cc in xml.Descendants("tbody").Descendants("tr").Descendants("td") where (cc.Attribute("class").Value == "a")
                           select new Time
                           {
                               name = c.Value,
                               data = cc.Value
                           };

我正在使用这个foreach来迭代:

foreach (var item in searched)
            {
                listBox1.Items.Add(item.name + item.data);
                listBox1.Items.Add("  ");

我不应该得到这样的结果吗?

牛仔裤10 - T恤10

相反,我得到: 牛仔裤10 - 牛仔裤20 - T恤10 - T恤20 -

这个linq声明错了吗?如何使用来自xml的这些值创建对象?

1 个答案:

答案 0 :(得分:1)

我不确定你的最终目标是什么,但我会做这样的事情:

XElement table = xml.Descendants("tbody").First();

var searched = from c in table.Descendants("tr")
               let team = c.Descendants().First()
               select new
               {
                   Name = team.Descendants("a").First().Value,
                   PG = c.Descendants("td").Where(td => (string)td.Attribute("class") == "tc-pg").First().Value,
                   J = c.Descendants("td").Where(td => (string)td.Attribute("class") == "tc-j").First().Value,
                   V = c.Descendants("td").Where(td => (string)td.Attribute("class") == "tc-v").First().Value,
                   // and so on...
               };

然后将项目添加到列表中:

foreach (var item in searched)
{
    listBox1.Items.Add(string.Format("{0} - {1}", item.Name, item.PG);
    listBox1.Items.Add(string.Format("{0} - {1}", item.Name, item.J);
    listBox1.Items.Add(string.Format("{0} - {1}", item.Name, item.V);

    // and so on...
}