Учитывая, что у меня есть три таблицы, Транспорт, Машины, Велосипеды. И у автомобилей, и у мотоциклов есть VehicleID FK, который ссылается на автомобили.
Я хочу посчитать все автомобили, которые являются такими автомобилями.
Vehicles.Select(x=>x.Car).Count();
Тем не менее, это даст мне ВСЕ строки с транспортными средствами и поместит ноль в строки, где тип транспортного средства - Велосипеды.
Я использую linqpad для этого и, глядя на sql statment, я понял, что Причина, по которой он это делает, заключается в том, что при соединении x.Car он выполняет LEFT OUTER JOIN между автомобилем и автомобилем, что означает, что он вернет все автомобили. Если я изменю запрос на использование JOIN, он будет работать должным образом.
Есть ли способ указать linq выполнить соединение с использованием этого синтаксиса? В конечном итоге я хочу сделать что-то вроде:
Vehicles.Select(x=>x.Car.CountryID).Distinct().Dump();
Но из-за этой ошибки:
InvalidOperationException: The null value cannot be assigned to a member with type System.Int32 which is a non-nullable value type.
В итоге я делаю вот что:
Vehicles.Where(x=>x.Car!=null).Select(x=>x.Car.CountryID).Distinct().Dump();