gpt4 book ai didi

c# - Entity Framework Linq Query to List - 使用时出错包含 : Only primitive types, 支持枚举类型和实体类型

转载 作者:太空狗 更新时间:2023-10-29 20:33:33 26 4
gpt4 key购买 nike

我有很多这样的查询,但我不明白为什么这个会出错。当我进行空检查然后使用 Contains 时,它似乎与我的 where 子句的部分有关。

我得到的错误是:

Cannot compare elements of type '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]]'. Only primitive types, enumeration types and entity types are supported.

以及它被抛出的代码:

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 类型的列表。

最佳答案

如果它不喜欢 null 检查并且你需要它是可选的,你可以这样做:

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)) &&

如果您的 productCategoryIds 不是可空整数的 IEnumerable,您可以对部分执行相同的操作。 (不太明白这个需要怎么支持而不是一个int列表)

关于c# - Entity Framework Linq Query to List - 使用时出错包含 : Only primitive types, 支持枚举类型和实体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30853692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com