Запрос EFCore, чтобы получить количество продуктов для каждого поставщика по поисковому запросу продукта - PullRequest
0 голосов
/ 10 января 2020

Я застрял в поисковом запросе продукта для веб-сайта сравнения цен.

Есть 3 таблицы:

Продукт: ProductId, Title

Поставщик: VendorId

Цена продукта: ProductId, VendorId, Price

Цена продукта таблица сопоставления для всех цен поставщиков для определенного продукта.

Теперь я хочу иметь возможность искать продукт, подобный "свитер синего цвета". Это должно заставить всех продавцов продавать товары, содержащие слово «синий свитер» и количество товаров, найденных для каждого продавца.

Вывод должен быть:

{[

{VendorA,Found:23},
{VendorB,Found:2},

}}

К настоящему времени у меня есть только этот запрос для получения всех поставщиков по запросу поиска товаров:

            var query = Context.Products
                        .Join(Context.ProductPrices,
                            product => product.ProductId,
                            pprice => pprice.ProductId,
                            (product, pprice) => new { product, pprice })
                        .Join(Context.Vendors,
                            pprice2 => pprice2.pprice.VendorId,
                            vendor => vendor.VendorId,
                            (pprice2, vendor) => new { pprice2, vendor })
                        .Where(x=>x.pprice2.product.Title.Contains("sweater blue"))
                        .Distinct()
                        .Select(x=>new
                        {
                            x.vendor
                        });

Я не знаю, как получить подсчеты, найденные для каждого поставщика в ProductPrices.

Спасибо!

1 Ответ

1 голос
/ 10 января 2020

вы можете просто использовать таблицы Product и productPrices , вы можете попробовать следующий код:

Dictionary<string,string> result = (from product in Context.Products
                     join productPrice in Context.ProductPrices on product.ProductId equals productPrice.ProductId
                     where product.Title == "sweater blue"
                     select new { VendorId = productPrice.VendorId, Tilte = product.Title }
                    ).GroupBy(v => v.VendorId).ToDictionary(k => k.Key, v => $"Found : {v.ToList().Count}");

...