LINQ — ‘тип одного из выражений в предложении join неверен’

#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 имеет другой регистр.