tee*_*nup 3 .net linq linq-to-entities entity-framework-4
我有一个很长的Linq To Entities查询: -
reports = db.CallProfileDailies
.Join(db.ReportDailyTotals,
cpd => cpd.Date,
rdt => rdt.Date,
(cpd, rdt) => new { cpd = cpd, rdt = rdt })
.Where(a => a.cpd.Skill == a.rdt.Skill)
.Join(db.SummaryIntervalTotals,
a => a.rdt.Date,
sit => sit.Date,
(a, sit) => new { cpd = a.cpd, rdt = a.rdt, sit = sit })
.Where(a => a.rdt.Skill == a.sit.Skill)
.Select((a, i) => new ReportModel
{
AverageAbandonDelay = a.sit.AvgAbanTime,
AverageAfterCallWorkTime = a.sit.AvgAcwTime,
AverageHandleTime = (a.sit.AvgAcwTime + a.sit.AvgAcdTime),
AverageSpeedOfAnswer = a.sit.AvgSpeedAns,
AverageTalkTime = a.sit.AvgAcdTime,
CallsAnswered = a.sit.AcdCalls,
Date = a.sit.Date.ToString(),
MaximumDelay = a.sit.MaxDelay,
PercentageAbandon = (a.sit.AbanCalls / (a.sit.AcdCalls + a.sit.AbanCalls)),
TotalCallsAbandon = a.sit.AbanCalls,
TotalCallsOffered = (a.sit.AcdCalls + a.sit.AbanCalls),
TotalHandleTime = (a.rdt.HoldTime + a.rdt.AcdTime + a.rdt.AcwTime)
}).Take(5).ToList();
Run Code Online (Sandbox Code Playgroud)
我在运行时收到以下错误: -
LINQ to Entities无法识别方法'System.Linq.IQueryable`1 [ExpediaReports.Models.ReportModel]选择[<> f_ AnonymousType1`3,ReportModel](System.Linq.IQueryable`1 [<> f _AnonymousType1`3 [ ExpediaReports.CallProfileDaily,ExpediaReports.ReportDailyTotal,ExpediaReports.SummaryIntervalTotal]],System.Linq.Expressions.Expression`1 [System.Func`3 [<> f__AnonymousType1`3 [ExpediaReports.CallProfileDaily,ExpediaReports.ReportDailyTotal,ExpediaReports.SummaryIntervalTotal],System .Int32,ExpediaReports.Models.ReportModel]])'方法,并且此方法无法转换为商店表达式.
我只是想了解这个错误意味着什么.我甚至无法读取它(Linq To Entities)无法识别的方法.
如何阅读此错误并识别无法识别的方法,以便我可以相应地更改我的查询?
这些字符在这里是什么意思:`<>'等.
Dav*_*kle 10
"此方法无法转换为商店表达式"意味着Linq to Entities无法将您的查询转换为SQL.
当您在.Select()函数中有某些东西尝试以无法直接转换为SQL的方式操作结果时(例如运行函数时),通常会发生这种情况.我敢打赌,"a.sit.Date.ToString()"行导致了这个问题.在你调用.ToList()之后,只需返回日期并格式化它,我敢打赌问题就会消失.
令人沮丧的是 - Linq to SQL在运行这样的查询方面要好得多,你在.Select()函数中有复杂的函数.请记住,Linq to Entities在将其转换为SQL的功能上非常有限.