2010-06-05 3 views
0

Я бегу запрос с использованием Linq2SQL, что сводится к следующему запросу:Исключение с Linq2SQL Query

 


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() 
+0

Возможно, вам потребуется опубликовать код для GetPersons. –

ответ

0

Если истечение срока действия null, оно все еще не является нулевой ссылкой (подсказка: ссылка).

Hadi, проблема в том, что вы написали умный код. Вместо этого напишите отладочный код.

0

expiration null null? Возможно, есть проблема.

Смежные вопросы