【问题标题】:ToListAsync throws 'Value cannot be null.' ExceptionToListAsync 抛出“值不能为空”。例外
【发布时间】:2017-09-16 19:33:54
【问题描述】:

IQueryable

var query = _db
    .ApplicationPaidServices
    .Include(it => it.Application)
    .Include(it => it.Application.User)
    .Where(it => Enum1.Value1 == it.Application.Enum1)
    .Skip(0);                

正在执行1

 var result1 = await (from it in query
                      select it)
            .ToListAsync();

有效。

正在执行2

 var result2 = await (from it in query
                      select
                      new
                      { it })
                     .ToListAsync();

抛出ArgumentNullException 并带有消息:值不能为空。参数名称:arguments[2]

堆栈跟踪

System.Dynamic.Utils.ContractUtils.RequiresNotNull(object value, string paramName, int index) System.Dynamic.Utils.ExpressionUtils.RequiresCanRead(表达式表达式,字符串参数名称,int idx) System.Dynamic.Utils.ExpressionUtils.ValidateOneArgument(MethodBase 方法,ExpressionType nodeKind,表达式参数,ParameterInfo pi,字符串 methodParamName,字符串 argumentParamName,int 索引) System.Dynamic.Utils.ExpressionUtils.ValidateArgumentTypes(MethodBase 方法,ExpressionType nodeKind,参考 ReadOnlyCollection 参数,字符串 methodParamName) System.Linq.Expressions.Expression.Call(表达式实例,MethodInfo 方法,IEnumerable 参数) Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.IncludeExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor 访问者)

在初始查询中添加 WhereSkip 可修复错误。

不知道是什么原因。

使用 Npgsql.EntityFrameworkCore.PostgreSQL.NET Core 1.1

【问题讨论】:

  • 任何时候看到此类异常,请确保这是当前的 EF Core 错误。
  • .Skip(0) ? - 跳过零元素有意义吗? community.embarcadero.com/blogs/entry/…
  • @FredrikRedin 此代码取自分页的实际实现,其中Skip函数的参数不是固定数字,而是根据当前页码计算的。

标签: c# entity-framework linq .net-core


【解决方案1】:

今天被这个咬了。一种可能的解决方法是在Select() 之前等待ToListAsync

        var paged = await queryable
            .OrderBy(m => m.Name)
            .Skip(0).Take(30)
            .ToListAsync();

        var result = paged.Select(ViewModel.Map).ToList();

【讨论】:

  • 好吧,在这种情况下,我们失去了仅从数据库加载对象的一部分而不是整个对象的好处。
  • 确实如此。但是当我写答案时,我使用的是 EF Core 1.x,它无论如何都会检索整个对象。
猜你喜欢
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 2017-11-11
  • 2019-12-15
  • 2018-11-02
相关资源
最近更新 更多