我有从前端到后端方法的数据。数据输入后,我需要遍历数据并将每个对象输出到文本文件。在代码段中,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
答案 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;
}