LINQ to Entities无法识别方法

时间:2011-03-30 09:45:41

标签: .net linq entity-framework-4 linq-to-entities

我有一个很长的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();

我在运行时收到以下错误: -

  

LINQ to Entities无法识别   方法   “System.Linq.IQueryable`1 [ExpediaReports.Models.ReportModel]   选择并[d> F_ AnonymousType1`3,ReportModel](System.Linq.IQueryable`1并[d>˚F _AnonymousType1`3 [ExpediaReports.CallProfileDaily,ExpediaReports.ReportDailyTotal,ExpediaReports.SummaryIntervalTotal] ]   System.Linq.Expressions.Expression`1 [System.Func`3并[d> f__AnonymousType1`3 [ExpediaReports.CallProfileDaily,ExpediaReports.ReportDailyTotal,ExpediaReports.SummaryIntervalTotal],System.Int32,ExpediaReports.Models.ReportModel]])”   方法,这个方法不能   翻译成商店表达。

我只是想了解这个错误意味着什么。我甚至无法读取它(Linq To Entities)无法识别的方法。

如何阅读此错误并识别无法识别的方法,以便我可以相应地更改我的查询?

这些字符在这里意味着什么:`<> '等

2 个答案:

答案 0 :(得分:10)

“此方法无法转换为商店表达式”意味着Linq to Entities无法将您的查询转换为SQL。

当您在.Select()函数中有某些东西尝试以无法直接转换为SQL的方式操作结果时(例如运行函数时),通常会发生这种情况。我敢打赌,“a.sit.Date.ToString()”行导致了这个问题。在你调用.ToList()之后,只需返回日期并格式化它,我敢打赌问题就会消失。

令人沮丧的是 - Linq to SQL在运行这样的查询方面要好得多,你在.Select()函数中有复杂的函数。请记住,Linq to Entities对将转换为SQL的函数非常有限。

答案 1 :(得分:1)

使用ToString确实不起作用,但此处的问题是.Select((a, i) => Linq-to-entities不支持此版本的Select。例外说它。