Я пытаюсь перебрать данные, поступающие из внешнего интерфейса. - PullRequest
1 голос
/ 11 апреля 2019

У меня есть данные, поступающие через передний конец к внутреннему методу.Как только данные поступают, мне нужно пройти через них и для каждого объекта вывести их в текстовый файл.В фрагменте кода pi.GetValue(order) возвращает правильные значения.Мне нужно получить доступ к этим значениям индивидуально и ввести их в текстовый файл.Я довольно новичок в C #.В мире javascript синтаксис будет отображаться в свойствах pi, а затем для доступа к значениям он будет pi.CartNumber, pi.LineNumber, и т. Д.

Я пробовал код, который показан, и я также пытался использовать GetEnumerator() method

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 Ответ

1 голос
/ 11 апреля 2019

(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;
}
...