实体框架 Linq 查询到列表 - 使用包含时出错:仅支持基元类型、枚举类型和实体类型
本文关键字:类型 实体 支持 枚举 包含时 查询 Linq 框架 列表 出错 | 更新日期: 2023-09-27 17:56:36
我有很多这样的查询,但我无法弄清楚为什么这个查询出错。当我进行空检查然后使用 Contains 时,它似乎与我的 where 子句的部分有关。
我得到的错误是:
无法比较类型为"System.Collections.Generic.IEnumerable"1[[System.Nullable'1[[System.Int32, mscorlib, Version=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);
我也尝试传入 int 类型的列表。
如果它不喜欢空检查,并且您需要它是可选的,则可以执行以下操作:
List<int> productCategoryIdsTemp = new List<int>();
if (productCategoryIds != null) {
productCategoryIdsTemp.AddRange(productCategoryIds.Where(id => id != null).Select(id => id.Value));
}
if (sections = null) {
sections = new List<string>();
}
然后在 Linq 查询中使用以下命令:
(productCategoryIdsTemp.Count == 0 || productCategoryIdsTemp.Contains(obj.ProductCategoryId)) &&
(sections.Count == 0 || sections.Contains(obj.section)) &&
如果你的产品类别ID不是可空整数的IEnumerable,你可以做与部分相同的操作。(真的不明白需要如何支持它而不是 int 列表)