Я пытаюсь создать запрос (или запросы) LINQ, который подсчитывает общее количество совпадений элементов в одном списке, которые существуют в другом списке. Например, возьмите следующие списки:
CartItems DiscountItems
========= =============
AAA AAA
AAA BBB
AAA
BBB
BBB
CCC
CCC
DDD
Результат операции запроса должен быть равен 2, поскольку я могу найти две комбинации AAA
и BBB
(из DiscountItems
) в содержимом CartItems
.
Я подумываю подойти к запросу, чтобы объединить списки, чтобы сократить CartItems
и включить только элементы из DiscountItems
. Решение состоит в том, чтобы найти CartItem
в результирующем запросе, который встречается наименьшее количество раз, что указывает, сколько комбинаций элементов существует в CartItems
.
Когда CartItems
фильтруется только для элементов в DiscountItems
, это может визуально отображаться так:
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
Таким образом, поскольку в корзине 2 комбинации скидок, результат равен 2.
Как это можно сделать?
Вот запрос, который у меня уже есть, но он не работает. query
приводит к перечислению из 100 элементов, намного больше, чем я ожидал.
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))