【问题标题】:Dynamic Linq Group By动态 Linq 分组依据
【发布时间】:2014-12-09 03:41:26
【问题描述】:

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

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

【问题讨论】:

  • 你的代码是怎么编译的? GroupBy 需要一个 Func 并且您正在传递两个字符串!
  • @RahulSingh 这是动态 linq

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


【解决方案1】:

GroupBy 的结果是IEnumerable<IGrouping<DynamicClass,InvoiceItem>>,因此您可以通过以下方式继续:

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

}

【讨论】:

  • 不错。这确实有效。我四处寻找 IGrouping。不知道动态会改变事情。标记为答案,干杯。
【解决方案2】:

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

希望这行得通。

【讨论】:

  • 如果 Linq 按原样运行,则不需要选择。此外,不需要先进行 GroupBy,然后再进行 GroupBy。嵌套它们只是导致了一些性能问题。
猜你喜欢
  • 2012-10-04
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多