После запроса Linq to Entities возникает «Невозможно создать постоянное значение типа« Data.InhouseUnit ». В этом контексте поддерживаются только исключительные типы (« Int32, String и Guid »).
IList<FaultReport> faultReports = (from fr in _session.FaultReports
where fr.CreatedOn > dateTime
select new FaultReport
{
Id = fr.Id,
ExecutionDate = fr.ExecutionDate ?? DateTime.MinValue,
FaultType = fr.FaultType,
Quarters = fr.Quarters,
InhouseSpaceId = fr.InhouseSpaceId,
InhouseSpace = new InhouseSpace { Id = fr.InhouseSpace.Id, Name = fr.InhouseSpace.Name },
InhouseUnitId = fr.InhouseUnitId ?? Guid.Empty,
**InhouseUnit = fr.InhouseUnitId == Guid.Empty ? null : new InhouseUnit { Id = fr.InhouseUnit.Id, Name = fr.InhouseUnit.Name }**
}).ToList();
В частности, это выражение if, выделенное жирным шрифтом, вызывает исключение.Мне нужно сделать проверку, так как fr.InhouseUnitId обнуляется.Если я вычеркну жирное выражение, остальная часть заявления будет работать нормально.Я потратил довольно много времени на форуме MSDN и в Интернете, чтобы понять, что является причиной исключения, но до сих пор не могу понять.Guid является скалярным, поэтому он должен работать, верно?Даже это выражение InhouseUnit = true ? null: new InhouseUnit()
вместо выражения, выделенного жирным шрифтом в приведенном выше утверждении, не будет работать.Можем ли мы даже написать if / else
Если я попытаюсь написать метод расширения, чтобы убрать логику и просто вернуть результат, выдается следующее исключение:
LINQ to Entities does not recognize the method 'System.Object
GuidConversion(System.Nullable`1[System.Guid], System.Object)' method, and this method
cannot be translated into a store expression