Тип одного из выражений в предложении соединения неверен в Entity Framework
При попытке выполнить этот запрос:
var query = from dpr in ctx.DPR_MM join q in ctx.QOT on dpr.DPR_QOT_ID equals qot_id join p in ctx.PAY_MM on new { q.QOT_SEC_ID, dpr.DPR_TS } equals new { p.PAY_SEC_ID, p.PAY_DATE } where q.QOT_ID = qot_id select new { dpr.dpr_ts, dpr.dpr_close, pay.First().pay_dividend };
Я получаю эту ошибку:
Тип одного из выражений в предложении соединения неверен. Ошибка ввода типа в вызове «Join».
- Лучший способ проверить, существует ли объект в Entity Framework?
- C # - код для заказа по свойству с использованием имени свойства в виде строки
- В LINQ для Entities поддерживаются только конструкторы и инициализаторы без параметров
- linq для объектов не распознает метод
- 'Содержит ()' обходной путь с использованием Linq для Entities?
QOT_SEC_ID
имеет тип decimal
и PAY_SEC_ID
имеет тип int32
. Мне не разрешено менять его в таблице.
Независимо от того, что я делаю, я не могу изменить его в свойствах модели. Я попытался преобразовать типы следующим образом:
join p in ctx.PAY on new { sec_id = (Int32)(q.QOT_SEC_ID), dpr.DPR_TS } equals new { sec_id = (Int32)p.PAY_SEC_ID, p.PAY_DATE }
но получая ошибку выше.
- Преобразование String в Int в EF 4.0
- Объект или сложный тип '' не могут быть сконструированы в запросе LINQ to Entities
- ASP.NET MVC 2.0 Реализация поиска в jqgrid
- большая проблема в преобразовании строки в datetime с использованием linq-to-entity
- Метод не может быть переведен в выражение хранилища
- Entity Framework 4 / POCO - С чего начать?
- Linq to Entities соединяются с groupjoin
- «Тип узла выражения LINQ« Invoke »не поддерживается в LINQ to Entities» - тупик!
Типы и имена свойств в анонимных типах должны совпадать:
new { p1 = q.QOT_SEC_ID, p2 = dpr.DPR_TS } equals new { p1 = (decimal)p.PAY_SEC_ID, p2 = p.PAY_DATE }
или если p.PAY_SEC_ID
были int?
:
new { p1 = (int?)q.QOT_SEC_ID, p2 = dpr.DPR_TS } equals new { p1 = p.PAY_SEC_ID, p2 = p.PAY_DATE }
В исходном запросе LINQ предложение where содержит назначение, а не сравнение (т. Е. Требуется «==» вместо «=»).
Я предполагаю, что один из столбцов имеет тип, который неявно конвертируется в другой. Вероятно, int
и int?
, Вот почему equals
преобразуется и new { X = 1 }
несовместим с new { X = (int?)1 }
.
Включить одну из конфликтующих столбцов в int
или int?
в зависимости от того, возможны ли нули или нет. Например
new { Customer_ID = (int?)pl.Customer_ID, ... }
По общему признанию, ошибка компилятора в данном конкретном случае неясна и не указывает на основную причину.
(Этот ответ был спасен из удаленного дубликата. Поскольку он более полный, чем принятый в настоящее время, я добавлю его.)