使用LINQ用XML在C#中创建对象

乔丹·安德鲁斯

嘿,所以我首先要说这是一项任务...我必须创建一个基于控制台的购物车,该购物车可以加载并保存到XML文件。

我还不太清楚如何将XML文件加载到对象中/什么是最好的方法是...。

 class Product
{
    public int RecordNumber { get; set; }
    public String Name { get; set; }
    public int Stock { get; set; }
    public int Price { get; set; }       
}
 class Cart
{

    public List<Product> items
    {
        get { return items; }
        set { items = value; }
    }

    public Cart() {}  //Right way to do constructor?

    public void AddProduct(Product prod)
    {
        items.Add(prod);
    }

    public void RemoveProduct(Product prod)
    {
        items.Remove(prod);
    }
}

static void Main(string[] args)
    {
 XDocument XDoc = XDocument.Load("inventory.xml"); // Loading XML file
        var result = from q in XDoc.Descendants("product")
            select new Product
            {
                RecordNumber = Convert.ToInt32(q.Element("recordNumber").Value),
                Name = q.Element("name").Value,
                Stock = Convert.ToInt32(q.Element("stock").Value),
                Price = Convert.ToInt32(q.Element("price").Value)
            };

XML文件设置如下(产品的十个条目):

 <product>
    <recordNumber>1</recordNumber>
    <name>Floo Powder</name>
    <stock>100</stock>
    <price>5</price>
</product>

我在这里有两个问题...我的主要方法是加载XML文件并创建10个对象吗?如果是这样,我如何访问这些对象?

其次,我打算将产品添加到购物车中,然后减少“库存”数字,但是当我考虑它时,这似乎是错误的。我应该为每个可用库存创建一个对象,然后将其添加到购物车中吗?那么关于我如何能够做到这一点的任何建议?

非常感谢!!

编辑:

我将不得不让用户按照他们的意愿向购物车添加/删除库存。我认为执行此操作的代码将显示所有10个对象(记录编号,名称,股票,价格)的详细信息后类似

String input = Console.ReadLine();
foreach (var prod in result) {
  if (input == prod.recordnumber) {   // Assuming that user selects via indexnumber
   cart.AddProduct(//no idea what to put from here on
  }
}  

我在正确的轨道上吗?

第二次编辑:

String productNumber = Console.ReadLine();
int productInt = Convert.ToInt32(productNumber);

var match = from p in result
where p.RecordNumber == productInt
   select p;

 if (match != null)
 {
   ShoppingCart.AddProduct(??);  //what variable do I put in the parentheses?
                                 // Need to also reduce stock
 }
   else
 {
    // Inform user that no product exists
 }

就像我在下面说的那样,我对括号中的内容完全不知所措。我曾尝试过match和p,但显然他们是不对的。一旦知道如何引用该对象,我还应该能够减少该对象的库存数量,并将另一个实例放入列表中。

再次感谢您的帮助

桑德加德

您的程序正在result变量中加载10个产品项,然后退出。要将它们放入购物车,您需要构造一个Cart对象,并将每个产品项添加到购物车中:

static void Main(string[] args)
{
    XDocument XDoc = XDocument.Load("inventory.xml"); // Loading XML file
    var result = from q in XDoc.Descendants("product")
        select new Product
            {
                RecordNumber = Convert.ToInt32(q.Element("recordNumber").Value),
                Name = q.Element("name").Value,
                Stock = Convert.ToInt32(q.Element("stock").Value),
                Price = Convert.ToInt32(q.Element("price").Value)
             };

    var cart = new Cart();

    // Logic to add/remove/list cart here
}

为了允许用户从购物车中添加/删除商品,您需要具有一个标识符,以确定是否添加/删除/列出商品以及哪个商品。这将必须处于循环中。您可能还会有退出条件。因此,符合以下要求:

var cmd = string.Empty;
do
{
    // Loop to allow the user to keep entering commands

    cmd = Console.ReadLine();        
    // if cmd == exit condition -> break;    
    // if cmd == list products condition -> write each prod to console
    // if cmd == add product condition -> Ask user to enter product number and add to cart
    // if cmd == remove product condition -> Ask user to enter product number and remove from cart
} while(true);

当用户输入产品编号时,您可以使用linq查找正确的产品:

var match = (from p in result
            where p.RecordNumber == productNumber
            select p).FirstOrDefault();

if (match != null)
{
    // Add/remove
}
else
{
    // Inform user that no product exists
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

LINQ to XML在C#中创建对象

来自分类Dev

在C#中使用LINQ创建XML

来自分类Dev

使用C#创建解析XML的对象

来自分类Dev

使用LINQ / C#在MongoDB集合中查找子对象

来自分类Dev

c#使用Linq更新列表中的对象

来自分类Dev

使用Linq在C#中删除多个XML节点

来自分类Dev

在C#中创建可重复使用的表单对象

来自分类Dev

使用C#中的RSA私钥文件创建RSACryptoServiceProvider对象

来自分类Dev

使用 C# 中已经存在的对象创建静态数组

来自分类Dev

用 c# Xml 解析复杂的 XML 到 linq

来自分类Dev

在C#中如何在LINQ to xml之后生成对象数组

来自分类Dev

在C#中如何在LINQ to xml之后生成对象数组

来自分类Dev

在C#中查询XML Linq

来自分类Dev

使用Linq C#对多层XML排序

来自分类Dev

在C#中使用LINQ解析XML

来自分类Dev

C#使用Linq从xml提取数据

来自分类Dev

使用LINQ和高度嵌套的XML创建类对象

来自分类Dev

无法使用linq to xml c#从xml文档中删除根节点

来自分类Dev

我需要使用linq和C#中的xml代码保存XML文件

来自分类Dev

从C#中的对象列表创建组

来自分类Dev

在C#中创建接口的对象

来自分类Dev

在C#中创建geoJson对象

来自分类Dev

在C#中创建嵌套的JSON对象

来自分类Dev

在C#中创建JSON请求对象

来自分类Dev

在C#中创建嵌套的JSON对象

来自分类Dev

如何在C#中创建对象

来自分类Dev

C#对象(创建和使用)

来自分类Dev

在C#中创建嵌套的xml文档

来自分类Dev

在C#中创建XML属性