J'essaie d'utiliser un lambda multi-ligne imbriqué Function
dans VB.NET et j'obtiens une erreur. Voici ce que mon code ressemble à:La fonction lambda multi-ligne imbriquée en tant que paramètre pour LINQ Select provoque une erreur
cartItems = cartItems.Select(Function(ci) New With {.CartItem = ci, .Discount = discountItems.FirstOrDefault(Function(di) di.SKU = ci.SKU)})
.Select(Function(k)
If k.Discount Is Not Nothing Then
k.CartItem.Discount = minNumberOfItemsDiscounted * k.Discount.DiscountAmount
End If
Return k.CartItem
End Function)
Et voici le long message d'erreur:
Error 1 Overload resolution failed because no accessible 'Select' can be called with these arguments:
Extension method 'Public Function Select(Of TResult)(selector As System.Func(Of <anonymous type>, Integer, TResult)) As System.Collections.Generic.IEnumerable(Of TResult)' defined in 'System.Linq.Enumerable': Nested function does not have a signature that is compatible with delegate 'System.Func(Of <anonymous type>, Integer, TResult)'.
Extension method 'Public Function Select(Of TResult)(selector As System.Func(Of <anonymous type>, Integer, TResult)) As System.Collections.Generic.IEnumerable(Of TResult)' defined in 'System.Linq.Enumerable': Data type(s) of the type parameter(s) cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
Extension method 'Public Function Select(Of TResult)(selector As System.Func(Of <anonymous type>, TResult)) As System.Collections.Generic.IEnumerable(Of TResult)' defined in 'System.Linq.Enumerable': 'Is' operator does not accept operands of type 'Integer'. Operands must be reference or nullable types.
Extension method 'Public Function Select(Of TResult)(selector As System.Func(Of <anonymous type>, TResult)) As System.Collections.Generic.IEnumerable(Of TResult)' defined in 'System.Linq.Enumerable': Data type(s) of the type parameter(s) cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error. C:\_Dev Projects\CMS2000\Components\NET\HBCatalogPromo\CatalogPromotion\CatalogPromotion.ConsoleTest\Module1.vb 88 21 CatalogPromotion.ConsoleTest
Il se sent comme je l'ai quelque chose de mal avec ma syntaxe parce que je l'ai fixé d'autres lignes par l'effondrement en ligne Functions
sur une ligne lorsque cela est possible. Cependant, je ne peux pas faire ça dans ce cas.
Pouvez-vous coller dans l'instruction ENTIER? L'erreur semble être causée par ce qui est "avant" le premier .Sélectionnez ... –
Je ne pense pas que vous voulez vraiment Sélectionnez - ou plutôt ** que faites-vous avec des effets secondaires ?!?!? ** –
@Reed J'ai collé dans la première ligne. La raison pour laquelle je l'avais laissée était parce que par lui-même, la première ligne ne jette pas une erreur. –