Получение отдельных строк с помощью Linq

#c# #.net #linq #ado.net

#c# #.net #linq #ado.net

Вопрос:

Я группирую данные с помощью linq как вы можете видеть из следующего кода, после объединения я хочу взаимодействовать с данными группы и добавлять в другую таблицу.

Но я получаю только InvoiceHeader.Ключ, я не знаю, как получить другие поля

         DataTable VendorInvoiceStagingTable;
        DataTable VendorInvoiceTable;
        VendorInvoiceStagingTable = new Program().ReadExcelFile(@"C:Usershuzaifa.gainDesktopVendor invoice import - sample data set.xlsx", "Sheet2");
        var InvoiceHeadercollection = from row in VendorInvoiceStagingTable.AsEnumerable()
                            group row by row.Field<string>(VendInvoice.Number) into grp
                            select grp;




         VendorInvoiceTable =  new Program().CreateHeader();
         foreach (var InvoiceHeader in InvoiceHeadercollection)
        {

         VendorInvoiceTable.Rows.Add(InvoiceHeader.Key, .....


        }
  

Ответ №1:

Поскольку InvoiceHeader это IGrouping реализация IEnumerable , вы можете просто перечислить элементы в группе, поэтому вы можете просто использовать foreach цикл:

 foreach (var InvoiceHeader in InvoiceHeadercollection)
{
  foreach(var row in InvoiceHeader)
      VendorInvoiceTable.Rows.Add(row);
}
  

Комментарии:

1. @huzaifa это помогло бы ответить на ваш вопрос, если бы вы указали, почему у вас это не сработает. Сообщение, на которое вы ссылаетесь, имеет другую проблему

2. Это вызывает исключение. не удается выполнить приведение, вы можете увидеть исключение на изображении, прикрепленном к ссылке

3. это не должно вызывать исключение, вы пробовали это вообще? обратите внимание, что существует внутренний цикл, в котором мы перечисляем строки, и во внешнем цикле нет преобразования в DataRow.