これにより、今日は問題が終了していません。私はこのクエリの最後の行は私に問題Entity Framework: 'System.Collections.Generic.IList`1'の定数値を作成できません
(criteria.Locations == null ||
criteria.Locations.Count == 0 ||
a.AccommodationPlaceJoins.Any(j => criteria.Locations.Contains(j.Place.PlaceName)))
それが与えるエラーさの原因になっている
var result =
DataContext.Accommodations.Where(a =>
(criteria.MinPrice == null || a.AccommodationRates.Any(r => r.From >= criteria.MinPrice)) &&
(criteria.MaxPrice == null || a.AccommodationRates.Any(r => r.To <= criteria.MaxPrice)) &&
(criteria.Locations == null || criteria.Locations.Count == 0 || a.AccommodationPlaceJoins.Any(j => criteria.Locations.Contains(j.Place.PlaceName)))
);
この単純なクエリを持って
」タイプ の一定の値を作成することができませんSystem.Collections.Generic.IList`1 '。このコンテキストでは、プリミティブ型( ' Int32、String、およびGuid'など)のみがサポートされています。
私はリストを作成しようとしていません。私がここでやろうとしていることは、場所に関連付けられている宿泊施設を戻すことです(AccommodationPlaceJoinテーブルを介して宿泊施設テーブルにリンクされているPlaceテーブルの場所名が基準内の場所名のいずれかと等しい) .Locations(IList型です)。
私はこの行をこれに変更しようとしましたが、動作しませんでした。作成することはできません
(criteria.Locations == null ||
criteria.Locations.Count == 0 ||
a.AccommodationPlaceJoins.Any(j => criteria.Locations.Any(l => l == j.Place.PlaceName)))
うわー、どんなに素晴らしい答えですか?感謝万円。私は非常に多くの間違った調査のラインを下った。 +1ありがとうございました。あなたが29Kポイント近く持っているのも不思議ではありません。とにかくこれはどうして起こるのですか? –
私はあなたの可読性の提案に沿ってリファクタリングしています。ありがとうございました。 –
@SachinKainth:LINQ to Entitiesでは、問合せのすべての式および式フラグメントをSQLに変換できる必要があるため、例外が発生します。比較 'criteria.Locations == null'はクライアント(= .NET)側では実行されませんが、EFはそれをSQLに変換したいので、データベースは比較を実行する必要があります。しかし、データベースは.NET/CLRオブジェクト参照を比較する方法を知らず、文字列、intなどのプリミティブ型だけをNULLでチェックすることができます。 SQLへの変換はできません - >例外。 – Slauma