我有很多像這樣的查詢,但我不明白爲什麼這個錯誤。當我進行空檢查然後使用Contains時,似乎它與我的where子句的某些部分有關。實體框架Linq查詢列表 - 使用時出錯包含:僅支持基本類型,枚舉類型和實體類型
我得到的錯誤是:
無法比擬的類型元素「System.Collections.Generic.IEnumerable`1 [System.Nullable`1 [System.Int32,mscorlib程序,版本= 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]],mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]'。只支持原始類型,枚舉類型和實體類型。
以及它拋出代碼:
public static IEnumerable<Product> GetProducts(int? productDepartmentId = null, int? productCategoryId = null, IEnumerable<int?> productCategoryIds = null, IEnumerable<string> sections = null)
{
using (var context = new AppContext())
{
var retList = (from obj in context.Products
where (productDepartmentId == null || obj.ProductDepartmentId == productDepartmentId) &&
(productCategoryId == null || obj.ProductCategoryId == productCategoryId) &&
(productCategoryIds == null || productCategoryIds.Contains(obj.ProductCategoryId)) &&
(sections == null || sections.Contains(obj.sections))
select obj).ToList();
return retList;
}
}
這些都是使得它的錯誤線。我相信,它不會像空校驗:
(productCategoryIds == null || productCategoryIds.Contains(obj.productCategoryIds)) &&
(sections == null || sections.Contains(obj.Section))
這裏是我的方法調用(部分沒有被通過):
List<int?> categoryIds = new List<Int?>;
varList = ProductsDAL.GetProducts(productDepartmentId: productproductDeparmentId,
productCategoryId: productCategoryId,
productCategoryIds: categoryIds);
我也試圖傳遞的List鍵入int。
categoryIds和sections從哪裏來? – Hammerstein
他們來自我的代碼。它們最終成爲逗號分隔的ID列表。我注意到這個問題肯定是由於where子句中有空檢查和包含的部分。 –
可能重複[無法比較'System.Collections.Generic.ICollection'類型的元素1只支持原始類型,枚舉類型和實體類型](http://stackoverflow.com/questions/23937112/cannot-compare-元素類型 - 系統集合 - generic-icollection1-only-p) –