在 Windows Phone 上使用 linq 创建对象

发布于 2024-12-17 17:17:01 字数 1452 浏览 0 评论 0原文

这是我正在使用的 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 的这些值创建对象?

This is a sample of the xml I´m using:

<?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>

I need to create a object and populate it with the data coming from the xml.
I´ve already the class with all the properties needed and I´m using this linq code to read the 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
                           };

Im using this foreach to iterate:

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

Shouldnt I get a result like this?

Jeans 10 -
T-Shirt 10

Instead Im getting:
Jeans 10 -
Jeans 20 -
T-Shirt 10 -
T-Shirt 20 -

Is this linq statement wrong? How can I create an object with these values coming from the xml?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

能怎样 2024-12-24 17:17:01

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

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...
}

I'm not sure what your final goal is, but I'd do something like this:

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...
               };

And then add the items to the list:

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...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文