Сначала это действительно выглядит так:
dc.Set<PCU>().FirstOrDefault(c => c.FileNumber == fileNumber).Company
похож на:
dc.Set<PCU>().Where(c => c.FileNumber == fileNumber).Select(x => x.Company).First()
но если внешний ключ «Company» равен нулю при использовании «FirstOrDefault», возвращение «Company», очевидно, вернет значение «null».
Во втором случае выбирается действительный FK «Company» из набора результатов, созданного условием «Where», и возвращается первый из этого набора, поэтому запрос «Where» возвращает «Company» .
Если вы не хотите изменять существующий код, мне кажется, что лучшим решением для вас будет на самом деле понять, почему у вас в базе данных есть нулевые внешние ключи.
Если это так, как и должно быть (например, может существовать нулевая запись «Компания»), то вам придется учитывать это в своих запросах, следовательно, изменяя их так, чтобы они возвращали только существующие записи «Компании».
Редактировать : Я забираю его обратно, я пропустил часть 'LazyLoading включена' ?