#c# #linq-to-sql
#c# #linq-to-sql
Вопрос:
У меня есть сложный LINQ to SQL для запроса, который объединяет две таблицы — одна довольно простая и работает нормально, но другая довольно сложная, и я получаю The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'GroupJoin
Это довольно длинный запрос, и я занимаюсь разработкой работы с доступом в Интернет, поэтому я подумал, что посмотрю, достаточно ли строки, которая, по-видимому, является проблемой:
join consignments in dc.Consignments
.FirstOrDefault(x => x.TripDate > dateFrom
amp;amp; x.TripDate < dateTo
amp;amp; x.DeliveryDepot == depot.Letter
amp;amp; (x.DeliveryStatus == 2 || x.DeliveryStatus == 3))
on new { Reg = s.VehicleReg, Depot = s.VehicleDepot }
equals new { Reg = consignments.VehicleReg, Depot = consignments.DeliveryDepot }
into con
Я убедился, что типы данных одинаковы, но это все равно не работает. Есть идеи?
Комментарии:
1. Спасибо всем, что ж, присмотревшись немного подробнее, один из типов данных хранилища — ‘char(2)’, а другой — ‘nchar(10)’. Приведет ли это к этому?
Ответ №1:
Вы уверены, что s.VehiculeDepot имеет тот же тип, что и отправления.Хранилище доставки?
on new { Reg = s.VehicleReg, Depot = s.VehicleDepot }
equals new { Reg = consignments.VehicleReg, Depot = consignments.DeliveryDepot }
Комментарии:
1. Это вызывало у меня сильную головную боль, пока я не присвоил тип каждому элементу.
{ID = something.Id} equals {ID = otherthing.Id}
где ID — это тип
Ответ №2:
Я думаю, что проблема в этой части:
on new { Reg = s.VehicleReg, Depot = s.VehicleDepot }
equals
new { Reg = consignments.VehicleReg, Depot = consignments.DeliveryDepot }
Убедитесь, что оно s.VehicleReg
имеет тот же тип, что и consignments.VehicleReg
, и s.VehicleDepot
имеет тот же тип, что и consignments.DeliveryDepot
.
Ответ №3:
Также убедитесь, что имена ваших членов в точности совпадают и имеют одинаковый регистр. Например:
new { Reg = s.VehicleReg, Depot = s.VehicleDepot }
equals
new { Reg = consignments.VehicleReg, DEpot = consignments.DeliveryDepot }
произойдет сбой, потому что во втором анонимном типе depot имеет другой регистр.