动态Linq集团

时间:2014-10-14 11:02:48

标签: c# linq dynamic group-by dynamic-linq

我目前正在构建报告,并且需要动态地对列进行分组,具体取决于用户的选择。现在,假设情况在所有列上都是固定的,查询将如下所示:

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转换为动态查询,但无济于事。迫切需要帮助。

2 个答案:

答案 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)");

希望这有效。