J'essaie de créer une ou plusieurs requêtes LINQ qui comptent le nombre total d'occurrences de combinaisons d'éléments dans une liste existant dans une liste différente. Par exemple, prenez les listes suivantes:Utilisez LINQ pour compter le nombre de combinaisons existant dans deux listes
CartItems DiscountItems
========= =============
AAA AAA
AAA BBB
AAA
BBB
BBB
CCC
CCC
DDD
Le résultat de l'opération de requête doit être 2 puisque je peux trouver deux combinaisons de AAA
et BBB
(de DiscountItems
) dans le contenu de CartItems
.
Mon idée en approchant la requête est de joindre les listes ensemble pour raccourcir CartItems
pour inclure uniquement les éléments de DiscountItems
. La solution serait de trouver le CartItem
dans la requête résultante qui se produit le moins de fois, indiquant ainsi combien de combinaisons d'éléments existent dans CartItems
.
Lorsque CartItems
est filtré uniquement les éléments DiscountItems
, il peut être visuellement affiché comme ceci:
CartItems that get a discount
=============================
AAA BBB <= This combination is eligible for a discount
AAA BBB <= This combination is eligible for a discount
AAA <= Not eligible
Ainsi, parce qu'il ya 2 combinaisons de la remise dans le panier, le résultat est 2.
Comment cela peut-il être fait?
est ici la requête que je l'ai déjà, mais il ne fonctionne pas. query
résultats dans une énumération avec 100 articles, beaucoup plus que ce à quoi je m'attendais.
Dim query = From cartItem In Cart.CartItems
Group Join discountItem
In DiscountGroup.DiscountItems
On cartItem.SKU Equals discountItem.SKU
Into Group
Select SKU = cartItem.SKU, CartItems = Group
Return query.Min(Function(x) x.CartItems.Sum(Function(y) y.Quantity))
Peut-être que simplement appeler Distinct couperait tous les multiples de matchs? –
La liste DiscountItems peut également contenir des doublons. Si oui, qu'est-ce que cela signifie - doivent-ils être dans la liste originale deux fois? –
Je pense qu'il y a une certaine confusion au sujet de ce que signifie votre question. Pour clarifier, pourriez-vous répondre à cette question ... si le panier = A, A, A et la remise = A, le résultat devrait-il être 1 ou 3? –