Note that order matters,You must place the class or table to be joined on the left side of the equals operator, and the joining class or table on the right side. In this case vwVehicle is the class to be joined, and Models is the joining class. The development team did some work to ensure that the compiler catches errors with order.
Below is your changed query:
listModel.AddRange((from veh in dataContext.vwVehicle
join model in dataContext.Models on new new { veh.Model, languageculture } equals { model.ModelName, model.LanguageCulture }
where (string.IsNullOrEmpty(year) || year.IndexOf(veh.Year) >= 0) && (string.IsNullOrEmpty(make) || make.IndexOf(veh.Make) >= 0)
&& countryCode == veh.countrycode
orderby veh.Model
select new IdNamePair() { Id = veh.Model, Name = model.ModelLocalized }).Distinct().ToList());