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内部输入多行时,它就会作为对象出现在数组中。如果有多行,它会输出多个数组,但会作为“订单”发送到后端。它将数据库正确填充为多行。这是一个关于前端发生了什么的例子。工作起来很有魅力。非常感谢。