C# 我正在尝试循环从前端传入的数据

C# 我正在尝试循环从前端传入的数据,c#,.net,entity-framework,asp.net-web-api2,C#,.net,Entity Framework,Asp.net Web Api2,我有数据通过前端到后端的方法输入。一旦数据进来,我需要循环遍历它,并为每个对象将其输出到文本文件。在代码段中,pi.GetValue(order)返回正确的值。我需要单独访问这些值并将它们输入到文本文件中。我对C#还相当陌生。在javascript世界中,语法将被pi映射到属性,然后访问值将是pi.CartNumber、pi.LineNumber、等 45588 1 DEWDC385K 1 EA 228.4832 101 101

我有数据通过前端到后端的方法输入。一旦数据进来,我需要循环遍历它,并为每个对象将其输出到文本文件。在代码段中,
pi.GetValue(order)
返回正确的值。我需要单独访问这些值并将它们输入到文本文件中。我对C#还相当陌生。在javascript世界中,语法将被pi映射到属性,然后访问值将是
pi.CartNumber、pi.LineNumber、

45588   1   DEWDC385K   1   EA  228.4832        101 101                                 EA                      Y   
我尝试了显示的代码,还尝试了使用
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;
        }
45588   1   DEWDC385K   1   EA  228.4832        101 101                                 EA                      Y   
(1) 这里不需要反射(
pi
-stuff)。(2) 您的
AddOrder
方法只接受一个
OrderDetails
-对象,因此无法执行任何循环

45588   1   DEWDC385K   1   EA  228.4832        101 101                                 EA                      Y   
Update:实际问题是,尽管随后有多个
AddOrder
-调用,但文件中只有一行文本。我修改了
StreamWriter
初始化,现在它将行追加到文件中,而不是在写入之前清除它

45588   1   DEWDC385K   1   EA  228.4832        101 101                                 EA                      Y   
下面是
AddOrder
的简化版本,它处理OrderDetails对象,并在成功保存后将记录写入文件

45588   1   DEWDC385K   1   EA  228.4832        101 101                                 EA                      Y   
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;
}
公共类OrderDetails
{
公共int Id{get;set;}
公共整数CartNumber{get;set;}
public int CustomerId{get;set;}
公共整数行号{get;set;}
公共字符串零件号{get;set;}
公共整数数量{get;set;}
public int SalesLocation{get;set;}
}
公共异步任务AddOrder(OrderDetails order)
{
wait\u context.OrderDetails.AddAsync(订单);
等待SaveAll();
var date=DateTime.Now.ToString(“yyyyMMdd”);
使用(StreamWriter writer=newstreamwriter($“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}eay”);
}
退货单;
}

order
只是一个实例,您正在迭代它的属性。别以为那是你想要的。你的意思是接受一份订单清单而不是一个实例吗?我想是的。数据来自前端的文本区域。它包括零件号和QTY。当其中有多行时,数据库会为它们输入的每个项目及其数量输入一行。当它被发送到后端时。我需要循环遍历它,并为每一行输入它到文本文件中。下面是它的外观示例。这是一行的示例。我可以让它输出,但当他们把多个项目,它创建了多行,它只会抓取一个。除了循环之外,可能还有更好的方法,但我不知道。我在我的原始帖子中添加了一个示例行,我已经尝试过了,它只适用于一行。每当输入的数据不止一行时,它只会抓取一行,我需要它来抓取它们all@JonathanEmery您能显示调用AddOrder方法的代码吗?`[HttpPut]公共异步任务AddOrder(OrderDetails order){await _repo.AddOrder(order);返回Ok(order);}`The“order”来自文本区域和表单的角度前端。在textarea内部每当有人在textarea内部输入多行时,它就会作为对象出现在数组中。如果有多行,它会输出多个数组,但会作为“订单”发送到后端。它将数据库正确填充为多行。这是一个关于前端发生了什么的例子。工作起来很有魅力。非常感谢。