Я думаю, причина в том, что вы используете LINQ to SQL, ваш запрос должен быть переведен в SQL, и вы получите исключение во время этого перевода.Contains
переводится в оператор IN
в SQL.Но так как список пуст, я думаю, что поставщик LINQ to SQL выдает исключение.
Это причина, по которой вы не получаете исключение при добавлении ToList
после GetTable<Car>()
, это заставляет васизвлекать и загружать все Cars
в память, поэтому запрос выполняется в памяти, поэтому нет необходимости переводить его в SQL, и короткое замыкание работает, как и ожидалось.
Обычно, если вы вызываете Contains
напустой список, вы должны получить NullReferenceException
, но вы получите ArgumentNullException
.Поэтому вам следует проверить трассировку стека, и, если это так, не использовать нулевой список в вашем запросе.
Редактировать: отправленная вами трассировка стека подтверждает мое предположение.Где-то вдоль дороги в списке вызывается метод OfType
, который вызывает исключение.