Я считаю, что проблема, с которой вы сталкиваетесь в своем запросе, заключается в том, что с помощью вызова DefaultIfEmpty()
вы пытаетесь извлечь значения из нулевого объекта. Если у вас есть действительный DeviceType, но у вас нет сопоставленных DeviceParameters, тогда, когда он пытается материализовать свойство settings с помощью этого оператора:
settings = from s in g
select new
{
ParamName = s.ParamName,
Param1 = s.Param1,
Param2 = s.Param2,
Param3 = s.Param3
}
Он пытается создать новый объект, и объект для "s" является нулевым, поэтому попытка получить доступ к свойству ParamName или Param1 и т. Д. Не будет работать. Я попробовал тот же код в LINQPad, и когда я удалил вызов DefaultIfEmpty (), то все заработало.
Не зная свойств и их типов, я не могу быть уверен, но, как я уже сказал, основываясь на реализации аналогичного кода в LINQPad, я получил аналогичные результаты.