我想抽象出一个我拥有的 lambda 函数,它根据它们的状态总结我的数据库中的记录。问题是,当我针对 LINQ to Entities 运行生成的 lambda 时,我收到“Internal .NET Framework Data Provider error 1025”。(仅供参考,它适用于 LINQ to Objects)。
这是代码:
<Extension()> _
Public Function Summarize(ByVal auditsToSummarize As IQueryable(Of HvacAudit)) As IQueryable(Of HvacAuditSummary)
Return From audit In auditsToSummarize
Group By month = audit.DateCreated.Value.Month Into g = Group
Select New HvacAuditSummary With {
.GroupingKey = month,
.Pending = g.Sum(Function(audit) If(audit.AuditStatusInt = CType(AuditStatus.Pending, Integer), 1, 0)),
.Issued = g.Sum(Function(audit) If(audit.AuditStatusInt = CType(AuditStatus.Issued, Integer), 1, 0)),
.Closed = g.Sum(Function(audit) If(audit.AuditStatusInt = CType(AuditStatus.Closed, Integer), 1, 0)),
.Cancelled = g.Sum(Function(audit) If(audit.AuditStatusInt = CType(AuditStatus.Cancelled, Integer), 1, 0))
}
End Function
这是我如何尝试使用 lambda 生成器的示例:
Select New HvacAuditSummary() With {
.Cancelled = g.Sum(AuditsWithStatus(AuditStatus.Cancelled))
}
Private Function AuditsWithStatus(auditStatus As AuditStatus) As Func(Of HvacAudit, Integer)
Return Function(audit) If(audit.AuditStatusInt = CType(auditStatus, Integer), 1, 0)
End Function
注意:我已经查看了有关此错误的其他问题,他们似乎都专注于使用错误的 LINQ,因为使用 lambda (Func) 代替表达式。在 sum 方法中,所有的候选人似乎都拿了一个 Func,所以我不知道我还能改变什么。