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フォーラムやWebでかなりの時間を費やしましたが、それでもかなり理解できません。 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、コンパイルは正常ですが、実行時に例外がスローされます。最初のチェックはfr.InhouseUnitId == nullです.fr.InhouseUnitIdはnull可能です。これまでLINQtoSQLでこのような式を問題なく使用してきました。これはおそらく何か変なことをしているエンティティフレームワークです。 – Xience