C# 动态Linq分组方法

C# 动态Linq分组方法,c#,linq,dynamic,group-by,dynamic-linq,C#,Linq,Dynamic,Group By,Dynamic Linq,我目前正在构建报告,需要根据用户的选择动态分组列。现在,假设所有列上的情况都是固定的,查询如下: var groupedInvoiceItems = invoiceItems.GroupBy(x => new { x.SalesInvoice.name, x.SalesInvoice.currencyISO, x.CatalogProduct }); var groupedInvoiceItems = invoiceItems.GroupBy("new (SalesInvoice.nam

我目前正在构建报告,需要根据用户的选择动态分组列。现在,假设所有列上的情况都是固定的,查询如下:

var groupedInvoiceItems = invoiceItems.GroupBy(x => new { x.SalesInvoice.name, x.SalesInvoice.currencyISO, x.CatalogProduct });
var groupedInvoiceItems = invoiceItems.GroupBy("new (SalesInvoice.name, SalesInvoice.currencyISO, CatalogProduct)", "it");
这样做将根据需要返回结果,即iGroup。然后,我将运行一个循环来处理必要的数据,如下所示:

foreach (var groupedInvoiceItem in groupedInvoiceItems)
{
    // Perform work here
}
现在,当我尝试使用动态Linq使分组动态化时,头痛就来了。查询如下:

var groupedInvoiceItems = invoiceItems.GroupBy(x => new { x.SalesInvoice.name, x.SalesInvoice.currencyISO, x.CatalogProduct });
var groupedInvoiceItems = invoiceItems.GroupBy("new (SalesInvoice.name, SalesInvoice.currencyISO, CatalogProduct)", "it");

问题是它不再返回i分组。因此,我的foreach循环不再工作。这件事有什么解决办法吗?我尝试将iGroup强制转换为动态查询,但没有成功。迫切需要帮助。

您应该进行分组,然后选择指定的属性进行迭代,并将它们扔到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)");

希望这能起作用。

GroupBy的结果是一个
IEnumerable
,因此您可以执行以下操作:

foreach (IGrouping<DynamicClass,InvoiceItem> invoiceItemGroup in groupedInvoiceItems)
{

}
foreach(将invoiceItemGroup分组到groupedInvoiceItems中)
{
}

您的代码是如何编译的?GroupBy需要一个Func,而您正在传递两个字符串@RahulSingh这是动态的linqNice。这确实有效。我一次又一次地试着分组。不知道动态变化的事情。标记为回答,干杯。如果Linq按原样运行,则不需要选择。而且,没有必要先进行分组,然后再进一步分组。嵌套它们只是造成了一些性能问题。