代码之家  ›  专栏  ›  技术社区  ›  Hadi Eskandari

linq2sql查询异常

  •  0
  • Hadi Eskandari  · 技术社区  · 16 年前

    我正在使用linq2sql运行一个查询,该查询归结为以下查询:

    
    
    DateTime? expiration = GetExpirationDate();
    IQueryable<Persons> persons = GetPersons();
    IQueryable<Items> subquery = from i in db.Items
                                 where i.ExpirationDate >= expiration
                                 select i;
    
    return persons.Where(p => p.Items != null && p.Items.Any(item => subquery.Contains(item)));
    
    

    当我评估函数的结果时,我得到一个nullreferenceexception,这里是堆栈跟踪。知道我做错了什么吗?!

    基本上我想选择所有的人,并按项目到期日期过滤他们。

       at System.Data.Linq.SqlClient.SqlFactory.Member(SqlExpression expr, MemberInfo member)
       at System.Data.Linq.SqlClient.QueryConverter.VisitMemberAccess(MemberExpression ma)
       at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.Visit(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
       at System.Data.Linq.SqlClient.QueryConverter.VisitBinary(BinaryExpression b)
       at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.Visit(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
       at System.Data.Linq.SqlClient.QueryConverter.VisitBinary(BinaryExpression b)
       at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.Visit(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
       at System.Data.Linq.SqlClient.QueryConverter.VisitWhere(Expression sequence, LambdaExpression predicate)
       at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
       at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
       at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.Visit(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.VisitContains(Expression sequence, Expression value)
       at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
       at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
       at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.Visit(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
       at System.Data.Linq.SqlClient.QueryConverter.VisitQuantifier(SqlSelect select, LambdaExpression lambda, Boolean isAny)
       at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
       at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
       at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.Visit(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
       at System.Data.Linq.SqlClient.QueryConverter.VisitBinary(BinaryExpression b)
       at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.Visit(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
       at System.Data.Linq.SqlClient.QueryConverter.VisitWhere(Expression sequence, LambdaExpression predicate)
       at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
       at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc)
       at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
       at System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(Expression node)
       at System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query, SqlNodeAnnotations annotations)
       at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
       at System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator()
       at System.Linq.SystemCore_EnumerableDebugView`1.get_Items()
    
    2 回复  |  直到 15 年前
        1
  •  0
  •   Amy B    16 年前

    如果expiration为空,则它仍然不是空引用(提示:reference)。

    哈迪,问题是你写的代码很聪明。而是编写可调试的代码。

        2
  •  0
  •   Keltex    16 年前

    是 expiration 无效的?可能有问题。