J'ai une requête Linq assez simple (code simplifié):Utiliser l'état de session dans les requêtes PLINQ
dim x = From Product In lstProductList.AsParallel
Order By Product.Price.GrossPrice Descending Select Product
Le produit est une classe. Product.Price est une classe enfant et GrossPrice est l'une de ses propriétés. Afin de calculer le prix, j'ai besoin d'utiliser Session ("exchange_rate").
Donc, pour chaque élément dans lstProductList il y a une fonction qui effectue les opérations suivantes:
NetPrice=NetPrice * Session("exchange_rate")
(puis retourne GrossPrice NetPrice + VatAmount)
Peu importe ce que j'ai essayé, je ne peux pas accéder à l'état de session .
J'ai essayé HttpContext.Current - mais cela retourne Nothing. J'ai essayé Implements IRequiresSessionState sur la classe (ce qui aide dans une situation similaire dans les gestionnaires http génériques [.ashx]) - pas de chance. J'utilise le mode simple d'état de session InProc. Le taux de change doit être spécifique à l'utilisateur.
Que puis-je faire?
Je travaille avec: développement web, .Net 4, VB.net
étape par étape:
page_load (en .aspx)
dim objSearch neuf searchclass ()
sortie dim = objSearch.renderProductsFound()
puis en objSearch.renderProductsFound:
lstProductList.Add (objProduct (1))
...
lstProductList.Add (objProduct (n))
dim x = Du produit En lstProductList.AsParallel
Trier par Product.Price.GrossPrice descendant Sélectionnez un produit
En Product.Price.GrossPrice Obtenez:
me.NetPrice retour + me.VatAmount
En Product.Price.NetPrice Get:
retour NetBasePrice session * ("exchange_rate")
Encore une fois, le code simplifié, trop coller ici. Fonctionne très bien si je déplie la requête dans les boucles For.
L'écrivez-vous comme ça? Parce que vous avez besoin de lancer n'importe quel élément de Session dans le bon type avant de l'utiliser. –
non, c'est juste simplifié. Le calcul est en réalité beaucoup plus compliqué que cela et il y a beaucoup de vérifications pour Nothing, les conversions de type (CDec dans le cas ci-dessus) et les valeurs par défaut. – Dima
Pour comprendre si HttpContext est disponible, veuillez expliquer comment vous appelez ce code. Est-ce d'un .aspx ou d'autre chose? –