私はテーブルをフィルタリングし、フィルタに一致する行を返すメソッドがあります。 はここに方法だ:私は次の例外を取得するメソッドを呼び出すたびLinqクエリを実行すると例外が発生する
しかしpublic List<RealEstate> GetMatchingRealestatesQuery(RealestateFilter f, RealestateSiteDbContext context)
{
IQueryable<RealEstate> realestates = context.RealEstates.Where(x => x.Status == RealEstateStatus.Open);
realestates = realestates.Where(x => f.Cities.Any(y => x.ZipCode.City.Id == y.Id));
if (f.MaxRent > 0)
realestates = realestates.Where(x => x.Rent <= f.MaxRent);
if (f.MinArea > 0)
realestates = realestates.Where(x => x.Area >= f.MinArea);
if (f.MinRooms > 0)
realestates = realestates.Where(x => x.Rooms <= f.MinRooms);
realestates = realestates.Where(x => f.RealestateTypes.Has(x.Type));
realestates = realestates.Where(x => f.RentalPeriod.Has(x.RentalPeriod));
return realestates.ToList();
}
、:
型「RealestateSiteModel.City」が一定の値を作成することができません。 この コンテキストでは、プリミティブ型または列挙型のみがサポートされています。
IQueryableを構築してから、.ToListを呼び出してクエリを実行するだけです。この例外の原因は何ですか?
感謝。 City ID(私の答えの更新されたコードに示されている)と比較しようとしましたが、私はまだ非常に同じ例外を受け取ります。 –
これは時には、比較しているコレクションを実際にメモリに取り込むのに役立ちます: 'var cities = f.Cities.Select(c => c.ZipCode.City.Id).ToArray();'あなたの後続のクエリでは: 'realestates = realestates.Where(x => cities.Any(c => c == x.Id);) –
それはトリックでした! 私はそれをすることが必要であることを奇妙に感じます。 とにかく、ありがとうございました! –