有没有办法将几种支持的Linq to Entity方法提取重构为一种方法?

问题描述

| 我有查询:
ctx.PrintJobs
.GroupBy(pj => pj.Department.Name)
.Select(g => new PrintJobReportItem
{
    A3SizePercentage = g.Sum(p => p.DocumentSize == \"a3\" ? p.TotalPhisicalPages : 0d) / g.Sum(p => p.TotalPhisicalPages) * 100,...
}
而且有效。 我有很多要计算的Perecentage值,因此我尝试将这段代码重构为:
ctx.PrintJobs
.GroupBy(pj => pj.Department.Name)
.Select(g => new PrintJobReportItem
{
    A3SizePercentage = g.PercentageOf(p => p.DocumentSize == \"a3\"),...
}
...
public static class GroupingEx
{
    public static double PercentageOf(this IGrouping<string,PrintJobItem> g,Func<PrintJobItem,bool> trueCondition)
    {
        return g.Sum(p => trueCondition(p) ? p.TotalPhisicalPages : 0d) / g.Sum(p => p.TotalPhisicalPages) * 100;
    }
}
但是后来我得到了错误:
System.NotSupportedException : LINQ to Entities does not recognize the method \'Double PercentageOf...
我了解为什么我会收到此错误。 还有其他方法可以将Linq 2实体支持的方法组提取为单个方法吗?还是我的堆栈粘贴了相同的代码位? Linq 2对象不是选项     

解决方法

        在ESQL中(将内联函数复制到多个ESQL查询-示例),这是可能的;如果使用EDMX,可以在Linq-to-entities中定义模型定义的函数。据我所知,代码首先(= no EDMX)不支持-在这种情况下,您必须使用@Daniel提到的方法,在该方法中实现结果并使用linq-to-objects执行您的方法。     ,        您可以首先从数据库中获取数据,然后对本地数据使用您的方法:
ctx.PrintJobs.GroupBy(pj => pj.Department.Name)
             .ToList()
             .Select(g => new PrintJobReportItem
                          {
                              A3SizePercentage = 
                                  g.PercentageOf(p => p.DocumentSize == \"a3\"),...
                          }
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...