Тип одного из выражений в предложении соединения неверен в 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».

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 } 

но получая ошибку выше.

Типы и имена свойств в анонимных типах должны совпадать:

 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, ... } 

По общему признанию, ошибка компилятора в данном конкретном случае неясна и не указывает на основную причину.

(Этот ответ был спасен из удаленного дубликата. Поскольку он более полный, чем принятый в настоящее время, я добавлю его.)

  • Как сделать массовую вставку - Linq для объектов
  • Включить внуков в EF Query
  • Linq int to string
  • Предложение "NOT IN" в LINQ to Entities
  • LEFT JOIN в LINQ для объектов?
  • Получить функцию результата в LINQ без перевода для сохранения выражения
  • Entity Framework 4 Single () vs First () vs FirstOrDefault ()
  • Как преобразовать DbSet в инфраструктуру Entity в ObjectQuery
  • Entity Framework: запрос дочерних объектов
  • Указанный член типа «Дата» не поддерживается в LINQ to Exities Exception
  • Как получить первую запись в каждой группе с помощью Linq
  • Давайте будем гением компьютера.