5
這使我今天沒有問題的結束。我有這個簡單的查詢實體框架:無法創建類型'System.Collections.Generic.IList`1的常量值'
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)))
);
此查詢的最後一行是造成我的問題
(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錶鏈接到住宿表的地點名稱)與標準中的任何一個地名相同.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對象引用,它只能檢查'NULL'等字符串類型,int等。沒有翻譯成SQL可能或支持 - >例外。 – Slauma