Linq to Entities 쿼리를 수행하면 "Data.InhouseUnit 형식의 상수 값을 만들 수 없습니다."와 같은 기본 형식 ('Int32, String 및 Guid')이이 컨텍스트에서 지원됩니다 "예외입니다.엔터티 프레임 워크 쿼리에 Linq에서 if-else 절
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가 nullable이기 때문에 수표를 발행해야합니다. 내가 과감한 표정을 지우면 성명서의 나머지는 잘됩니다. 예외의 원인을 이해하기 위해 msdn 포럼과 웹에서 상당한 시간을 보냈지 만 여전히 이해할 수는 없습니다. Guid는 스칼라이므로 제대로 작동해야합니다. 위의 문장에서 굵게 표시된 표현 대신이 표현 인 InhouseUnit = true ? null: new InhouseUnit()
도 작동하지 않습니다./
내가 논리를 빼앗아 단지 결과를 반환하는 확장 메서드를 작성하려고하면
다른, 다음과 같은 예외가 발생하면 우리는 심지어 쓸 수 :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
내가 잘못 아니에요, 여기에 문제는 아무 생각 fr.InhouseUnitId의 어떤 가치가없는 것처럼 컴파일러, SQL 쿼리로 LINQ를 컴파일 할 수없는 것입니다 - Guid.Empty 그 당시있을 것입니다. LINQ 문은 SQL 문으로 컴파일하려면 일정해야합니다. 나는이 문제에 대한 해결책을 모르기 때문에이를 설명으로 남겼습니다. –
@DarylTeo, 컴파일이 정상적으로 실행되면 예외가 throw됩니다. 처음에는 fr.InhouseUnitId가 nullable이므로 fr.InhouseUnitId == null이었습니다. LINQtoSQL에서 이전에 그런 식을 사용해 보았습니다. 아마 뭔가 이상한 일을하는 엔티티 프레임 워크입니다. – Xience