-1

我需要简单的 linq 查询,它将创建字典 我有 Xml,其中包含客户列表,谁可以购买一些产品 对于每个客户,只能免费提供一种产品 下面是我的示例 Xml 我已经创建了一个看起来像的类

Public Class CustomerFreeItem
{
  public string CustomerID
  public string FreeproductName
  public string ActualPrice
}

<customers>
  <customer id="1">
    <product name="book" free="false" actualPrice="10"/>
    <product name="pen" free="true" actualPrice="10"/>
    <product name="scale" free="false" actualPrice="10"/>
  </customer>
  <customer id="2">
    <product name="book" free="true" actualPrice="10"/>
    <product name="pen" free="false" actualPrice="10"/>
    <product name="scale" free="false" actualPrice="10"/>
  </customer>
  <customer id="3">
    <product name="book" free="false" actualPrice="10"/>
    <product name="pen" free="false" actualPrice="10"/>
    <product name="scale" free="true" actualPrice="10"/>
  </customer>
</customers>

Frome Above Xml 我想要一个字典,其中客户 ID 作为键,值作为 FreeProduct(CustomerFreeItem 对象)

请建议

谢谢,鲑鱼。

4

2 回答 2

2

因此不清楚您使用的是什么语言(类声明在 C# 和 VB 中均无效)这里是 C# 解决方案

XDocument xdoc = XDocument.Load(path_to_xml_file);
var query = from c in xdoc.Descendants("customer")
            let freeProduct = c.Elements("product")
                                .Where(p => (bool)p.Attribute("free"))
                                .Single()                        
            select new CustomerFreeItem()
            {
                CustomerID = (int)c.Attribute("id"),
                FreeproductName = (string)freeProduct.Attribute("name"),
                ActualPrice = (int)freeProduct.Attribute("actualPrice")
            };

Dictionary<int, CustomerFreeItem> dictionary =  
     query.ToDictionary(x => x.CustomerID);

我使用了以下类声明:

public class CustomerFreeItem
{
    public int CustomerID { get; set; }
    public string FreeproductName { get; set; }
    public int ActualPrice { get; set; }
}

我假设每个客户都只有一种免费产品。

于 2012-11-10T17:59:28.330 回答
0

使用布局制作字典并使用XmlSerializer,您将看到所需的格式。然后你可以反转这个过程,你的字典就会被填满。

于 2012-11-10T18:00:25.047 回答