Я новичок в Linq, и я пытаюсь написать запрос, используя базу данных northwind, которая должна возвращать всех поставщиков, у которых есть два или более продуктов в той же категории.
var test1 =
(from p in Products
join pi in Products on p.CategoryID equals pi.CategoryID
join pf in Products on p.SupplierID equals pf.SupplierID
where p.ProductID != pi.ProductID
select new
{p.ProductName, p.CategoryID, p.SupplierID}).ToList().Distinct();
test1.Dump();
Это была моя последняя попытка, которая не сработала. Я немного смирился, потому что я пытался понять это в течение нескольких часов, и он по-прежнему не будет делать то, что он должен. Может, я просто все неправильно понял?
Мой подход состоял в том, что должно быть два или более списков с одним и тем же SupplierID и CategoryID, но разным ProductID, но все же я не нашел решения.
Это лучше сделать с помощью GroupBy() :
Ваш желаемый результат отсутствует, но я могу сказать вам, что то, что вы делаете прямо сейчас, не принесет большой пользы.
Проще говоря, в настоящее время вы просите базу данных вернуть все продукты, которые соответствуют всем продуктам, которые соответствуют всем продуктам, что в основном приводит к тому, что вы получаете все продукты, если база данных не истекает. Таким образом, мы можем упростить ваш запрос к этому:
После этого необходимо выбрать уникальные списки наименований продуктов, категорий и поставщиков. Главный вопрос здесь: вы хотите уникальный список комбинаций, или одно из трех свойств должно быть уникальным? Предполагая, что первый, самый простой способ получить результат-это как таковой:
Тогда вы можете сделать это:
Теперь у вас есть список всех уникальных комбинаций название продукта / категория / поставщик.