LINQ to Entities не распознает метод - PullRequest
3 голосов
/ 30 марта 2011

У меня длинный запрос 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..ExpediaReports.Models.ReportModel]]) ', и этот метод нельзя преобразовать в выражение магазина.

Я просто хочу понять, что означает эта ошибка.Я даже не могу прочитать, какой метод он (Linq To Entities) не может распознать.

Как прочитать эту ошибку и определить нераспознанный метод, чтобы я мог соответствующим образом изменить свой запрос?

Что означают эти символы здесь: `<> 'и т. Д.

Ответы [ 2 ]

10 голосов
/ 30 марта 2011

«этот метод не может быть переведен в выражение хранилища» означает, что Linq to Entities не может преобразовать ваш запрос в SQL.

Это часто происходит, когда в функции .Select () есть попыткаманипулировать результатами таким образом, который не может быть напрямую переведен в SQL, например, когда вы запускаете функцию.Могу поспорить, что проблема вызвана строкой "a.sit.Date.ToString ()".Просто верните дату и отформатируйте ее после того, как вы вызвали .ToList (), и я уверен, что проблема исчезнет.

Это может разочаровать - Linq to SQL намного лучше выполнял такие запросы, какэто где у вас были сложные функции в вашей функции .Select ().Имейте в виду, что Linq to Entities очень ограничен в функциях, которые он будет переводить в SQL.

1 голос
/ 30 марта 2011

Использование ToString действительно не работает, но проблема здесь была .Select((a, i) => Эта версия Select не поддерживается Linq-to-entity. Исключение говорит это.

...