我正在尝试遍历来自前端的数据

时间:2019-04-11 18:55:45

标签: c# .net entity-framework asp.net-web-api2

我有从前端到后端方法的数据。数据输入后,我需要遍历数据并将每个对象输出到文本文件。在代码段中,pi.GetValue(order)返回正确的值。我需要单独访问这些值,并将它们输入到文本文件中。我是C#的新手。在JavaScript世界中,语法将被pi映射到属性,然后访问其值将是pi.CartNumber, pi.LineNumber,等。

我尝试了显示的代码,也尝试使用GetEnumerator()方法

Model:
public class OrderDetails
    {
        public int Id { get; set; }
        public int CartNumber { get; set; }
        public int CustomerId { get; set; }
        public int LineNumber { get; set; }
        public string PartNumber { get; set; }
        public int Qty { get; set; }
        public int SalesLocation { get; set; }
    }

Repository Method:

public async Task<OrderDetails> AddOrder(OrderDetails order)
        {
            await _context.OrderDetails.AddAsync(order);

            await SaveAll();

            StringBuilder sb = new StringBuilder();

            PropertyInfo[] properties = order.GetType().GetProperties();

            var date = DateTime.Now.ToString("yyyyMMdd");

            using (StreamWriter writer = new StreamWriter(($"Y:\\WOL-0{order.CartNumber}-{order.CustomerId}-{date}-085715.txt")))
            {

                foreach (PropertyInfo pi in properties)
                {
                    Console.WriteLine(pi.GetValue(order));

                    writer.WriteLine($"0{order.CartNumber}  {order.LineNumber}  {order.PartNumber}  {order.Qty} EA          {order.SalesLocation}   {order.SalesLocation}                                   EA                      Y                                                       ");

                }

            }


            return order;
        }

当数据中有多个输入时,预期结果将在文件内部显示多行。实际结果是它在数据中首先写入了6行。

编辑:

这是一行的示例。

45588   1   DEWDC385K   1   EA  228.4832        101 101                                 EA                      Y   

1 个答案:

答案 0 :(得分:1)

(1)此处不需要反射(pi-东西)。 (2)您的AddOrder方法仅接受单个OrderDetails对象,因此您无法执行任何循环。

更新:实际的问题是,尽管随后有多个AddOrder调用,但文件中只有一行文本。我修改了StreamWriter初始化,现在将行附加到文件中,而不是在写入之前将其清除。

下面是AddOrder的简化版本,它处理OrderDetails对象,并在成功保存后将记录写入文件。

public class OrderDetails
{
    public int Id { get; set; }
    public int CartNumber { get; set; }
    public int CustomerId { get; set; }
    public int LineNumber { get; set; }
    public string PartNumber { get; set; }
    public int Qty { get; set; }
    public int SalesLocation { get; set; }
}

public async Task<OrderDetails> AddOrder(OrderDetails order)
{
    await _context.OrderDetails.AddAsync(order);
    await SaveAll();
    var date = DateTime.Now.ToString("yyyyMMdd");

    using (StreamWriter writer = new StreamWriter($"Y:\\WOL-0{order.CartNumber}-{order.CustomerId}-{date}-085715.txt", true))
    {
        writer.WriteLine($"0{order.CartNumber}  {order.LineNumber}  {order.PartNumber}  {order.Qty} EA          {order.SalesLocation}   {order.SalesLocation}                                   EA                      Y                                                       ");        
    }
    return order;
}