2010-09-30 3 views
1

null Lorsque vous interrogez une collection en utilisant LINQ retourne toujours nullLorsque vous interrogez une collection en utilisant LINQ retourne toujours

Collection<JCTransLabour> oJCTransLabours = null; 

oJCTransLabour = HttpContext.Current.Session["CurrentLabourTransactions"] as 
            Collection<JCTransLabour>; 

// at this point the collection oJCTransLabours contains 3500 records 

var oCurrentLabourTrans = from clt in oJCTransLabours 
          where clt.TransactionDate.Date != DateTime.Now.Date 
          select clt; 

// at this point the collection oJCTransLabour = null 
// I have tried to search on different fields 

return oCurrentLabourTrans; 

Il doit y avoir quelque chose que je fais mal. Toute aide sera la bienvenue.

+0

Après la première étape, la variable oJCTransLabour n'est-elle pas vraiment nulle, ou est-ce que HttpContext.Current.Session ["CurrentLabourTransactions"] n'est pas nul, car l'opérateur 'as Collection' dans C# renvoie null si le type doesn ' t correspond, contrairement à la variable (Collection), qui donne une exception. –

+0

En note, soyez prudent avec 'DateTime.Now'. Découvrez 'DateTime.UtcNow'. –

Répondre

1

Il y a au moins une faute de frappe dans votre question.
Vous dites que, après

oJCTransLabour = HttpContext.Current.Session["CurrentLabourTransactions"] as Collection<JCTransLabour>; 

oJCTransLabour est non nul, non? Cela a du sens si la session le contient.

Ensuite, vous définissez oCurrentLabourTrans et lui assignez une requête LINQ. Et puis vous dites que

// at this point the collection oJCTransLabour = null 

Attendez, comment peut-il être nul? Vous ne l'avez même pas modifié (c'était oCurrentLabourTrans modifié) et vous venez de dire oJCTransLabour n'est pas nul!

Mise à jour: Je viens de remarquer qu'il ya aussi taper des noms: vous l'appelez oJCTransLabours, vous l'appelez oJCTransLabour. S'il vous plaît poster le exacte code de sorte que nous ne faisons pas d'hypothèses sur ce que vous avez peut-être mal tapé.

Et, bien sûr, l'expression LINQ ne peut pas être nulle. Je pense qu'il est plus probable que oJCTransLabours est nulle bien que vous énoncez autrement.

La raison pour laquelle vous pensez que c'est peut-être parce que vous êtes sûr que HttpContext.Current.Session["CurrentLabourTransactions"] n'est pas null. Cela est vrai, mais vous utilisez l'opérateur as pour convertir la valeur en Collection<JCTransLabour>. Contrairement à l'opérateur de diffusion, as ne déclenche pas d'exception si les types ne concordent pas, il renvoie simplement null.

Vous pourriez vouloir essayer

oJCTransLabour = (Collection<JCTransLabour>)HttpContext.Current.Session["CurrentLabourTransactions"]; 

et voir si des erreurs apparaissent.

0

Cela ne ressemble pas à un problème de linq, mais plutôt que la valeur de la session est nulle ou non Collection<JCTransLabour>.

Vous pouvez vous assurer qu'il est non nul en changeant la recherche pour:

oJCTransLabour = (HttpContext.Current.Session["CurrentLabourTransactions"] as Collection<JCTransLabour>) ?? new Collection<JCTransLabour>(); 

S'il devrait toujours être une valeur de session, vous pouvez lancer une exception si la valeur n'a pas été trouvé avant de faire la requête.

0

essayez ceci:

var oCurrentLabourTrans = (from clt in oJCTransLabours where clt.TransactionDate.Date != DateTime.Now.Date select clt).ToList(); 
1

Je pense que vous êtes juste des noms de variables confus:

// You were missing an 's' before 
oJCTransLabours = HttpContext.Current.Session["CurrentLabourTransactions"] 
            as Collection<JCTransLabour>; 
Questions connexes