我想根据条件将lambda传递给我的.Select()方法。
我把我的lambda设置为:
Func<Monthly, int?> f = x => x.CLDD;
然后我按照这样设置我的.Select():
IQueryable query =
db.Monthlies
.GroupBy(o => o.Date.Value.Year)
.Select(
o => new {
Year = o.Key,
MaxDate = o.Max(x => x.Date),
Data = o.Sum(f)
}
)
.Where(o => o.Year != currentYear)
.OrderBy(o => o.Year);
代码编译并运行正常,但查询不会发回任何结果。当我调试并观察查询时,我看到它说:
+ base {"Internal .NET Framework Data Provider error 1025."}
System.SystemException {System.InvalidOperationException}
请注意我是这样做的:
Expression<Func<Monthly, int?>> f = x => x.CLDD;
然后o.Sum(f)错误说:
Error 1 Instance argument: cannot convert from
'System.Linq.IGrouping<int,MyWeb.Models.Monthly>' to
System.Linq.IQueryable<MyWeb.Models.Monthly>'
谢谢!
答案 0 :(得分:2)
您很接近,实体框架需要Expression
才能使用Func
,但收到Sum
的{{1}}扩展方法仅适用于Expression
现在在IQueryable
内,您从Select
获得IGrouping
,但GroupBy
仅IQueryable
{。}}。
所以你只需要将其转换为正确的扩展方法:
IEnumerable