В настоящее время я пытаюсь получить список продуктов, которые есть в списке магазинов, но только в том случае, если название продукта совпадает.
Я всегда получаю 0 Товаров обратно.
Я попытался решить проблему, используя два разных подхода, которые приведены ниже.
//First Approach, return 0
var stores= Store.ReadAll().Where(prods =>
prods.Products.Contains(product))
//Second Approach, doesn't compile but it shows what i wan't to do.
var stores= Store.ReadAll().Where(prods =>
prods.Products.Where(p => p.ProductName == productName));
Помощь приветствуется :)
Я не уверен, что вы пытаетесь сделать. У вас есть список продуктов, и вы хотите получать все продукты из всех магазинов, которые есть в вашем списке?
Используйте Select()
, чтобы получить определенный атрибут или свойство, и ToList()
, чтобы получить список из запроса.
Тип - строка, правильно. Я пытаюсь получить список магазинов, в которых есть товар, звучит просто, но он просто не хочет работать. Я также обновил код, потому что заметил, что имя переменной неверно. Привет
Поскольку у нас мало информации по вашему вопросу, я также могу предположить, что вам, возможно, придется учитывать чувствительность к регистру при сравнении названия продукта.
Вы ищете Any
вместо Where
:
var products = Store.ReadAll().Where(prods => prods.Products.Any(p => p.ProductName == productName));
Итак, я частично решил свою проблему и, по-видимому, это была не проблема linq, а проблема с базой данных. У меня есть список объектов, который содержит список объектов, который дает мне отношение M: M. Но .net Entity Framework не реорганизовалась, когда я изменил список с помощью list.add (item). Так что мой список всегда был пуст.
Но все равно спасибо за помощь! :)
Предполагая, что stores
является типом IEnumerable, следующее должно работать. Важно передать второй параметр методу Contains, поэтому при сравнении регистр не учитывается, иначе он ничего не вернет, если регистр в названиях продуктов разный.
В своем ответе я предположил, что тип Store имеет свойство под названием Products of List <string> type.
var matchingStores = stores.Where(s=> s.Products.Contains(productName,
StringComparer.OrdinalIgnoreCase));
Покажите, пожалуйста, определение и инициализацию
productName
; название предполагает строку, это фактический тип? Также покажите определение типа члена списка.