2010-06-05 4 views
0

J'exécute une requête en utilisant Linq2SQL qui se résume à la requête suivante:Exception avec Linq2SQL Interrogation

 


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

Quand j'évaluer le résultat de la fonction, je reçois un NullReferenceException et est ici la trace de la pile. Une idée de ce que je fais mal ?!

Fondamentalement, je veux sélectionner toutes les personnes et les filtrer par date d'expiration de l'article.

 
    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

Vous devrez peut-être écrire le code pour GetPersons. –

Répondre

0

si l'expiration est nulle, ce n'est toujours pas une référence nulle (indice: référence). Hadi, le problème est que vous avez écrit du code intelligent. Au lieu de cela, écrivez du code débogué.

0

Est-ce que expiration est null? Peut-être qu'il y a le problème.