我目前正在构建报告,并且需要动态地对列进行分组,具体取决于用户的选择。现在,假设情况在所有列上都是固定的,查询将如下所示:
var groupedInvoiceItems = invoiceItems.GroupBy(x => new { x.SalesInvoice.name, x.SalesInvoice.currencyISO, x.CatalogProduct });
这样做会根据需要返回结果,IGrouping。然后我会运行一个循环来处理必要的数据,如下所示:
foreach (var groupedInvoiceItem in groupedInvoiceItems)
{
// Perform work here
}
现在,当我尝试使用Dynamic Linq进行分组动态时,头痛就出现了。查询如下:
var groupedInvoiceItems = invoiceItems.GroupBy("new (SalesInvoice.name, SalesInvoice.currencyISO, CatalogProduct)", "it");
这个问题是它不再返回IGrouping。因此,我的foreach循环不再有效。这件事有什么办法吗?我尝试将IGrouping转换为动态查询,但无济于事。迫切需要帮助。
答案 0 :(得分:4)
GroupBy
的结果是IEnumerable<IGrouping<DynamicClass,InvoiceItem>>
,因此您可以继续执行以下操作:
foreach (IGrouping<DynamicClass,InvoiceItem> invoiceItemGroup in groupedInvoiceItems)
{
}
答案 1 :(得分:-1)
您应该进行分组,然后选择指定的属性进行迭代,将它们放入foreach循环中。试试这个:
var groupedInvoiceItems = invoiceItems.GroupBy("SalesInvoice.name","it").GroupBy("SalesInvoice.currencyISO","it").GroupBy("CatalogProduct","it").Select("new (it.SalesInvoice.name,it.SalesInvoice.currencyISO,it.CatalogProduct)");
希望这有效。