无法创建“System.Int32[]”类型的空常量值。

OrE*_*lse 5 c# linq entity-framework

通过使用以下

  PagedData.Products = from p in db.Products
                                     where (from m in p.Manufacturers
                                            where model.man.Contains(m.ManufacturerID)
                                            select m).Any()
                                     where (from s in p.Sizes
                                            where model.size.Contains(s.SizeID)
                                            select s).Any()
                                     where (from c in p.Colors
                                            where model.color.Contains(c.ColorID)
                                            select c).Any()
                                     select p;
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

无法创建“System.Int32[]”类型的空常量值。此上下文中仅支持实体类型、枚举类型或基本类型。

我明白了错误的重点,但我不知道应该如何解决它。和model.man model.sizemodel.color整数数组,也可能为空。

Ger*_*old 6

由于所有条件都必须为真才能通过任何条件,因此Product您应该首先检查所有数组是否都有任何内容:

if (model.man != null && model.size != null && model.color != null
      && model.man.Any() && model.size.Any() && model.color.Any())
{
    PagedData.Products = from p in db.Products ...
Run Code Online (Sandbox Code Playgroud)

现在,如果您预先知道查询无论如何都不会返回任何数据,则您将不会执行查询。并且它不会抛出异常,因为您从未使用null数组运行查询。

  • @TomTom 这仅对链接 where 子句(“And”)有用,使用 Linqkit,您可以将表达式链接为“Or”。 (2认同)

归档时间:

查看次数:

11306 次

最近记录:

9 年,9 月 前