Actualmente estoy tratando de obtener una lista de productos que están en una lista de tiendas, pero solo si el nombre del producto es el mismo.

Siempre recibo 0 artículos de vuelta.

Traté de resolver el problema usando dos enfoques diferentes, que están a continuación.

//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));

Ayuda apreciada :)

1
Dominic Järmann 13 sep. 2018 a las 10:12

3 respuestas

La mejor respuesta

Lo que está buscando es Any en lugar de Where:

var products = Store.ReadAll().Where(prods => prods.Products.Any(p => p.ProductName == productName));
5
Selman Genç 13 sep. 2018 a las 07:14

Suponiendo que stores es un tipo IEnumerable, lo siguiente debería funcionar. Es importante pasar el segundo parámetro al método Contiene, por lo que la comparación no distingue entre mayúsculas y minúsculas, de lo contrario no devolverá nada si el caso es diferente entre los nombres de productos.

Supuse en mi respuesta que el tipo de Tienda tiene una propiedad llamada Productos de la lista tipo.

var matchingStores = stores.Where(s=> s.Products.Contains(productName,
                                                    StringComparer.OrdinalIgnoreCase));
0
Sunil 13 sep. 2018 a las 07:53

Así que en parte resolví mi problema y aparentemente, no era realmente un problema linq, era un problema de base de datos. Tengo una Lista de objetos que contiene una lista de objetos, lo que me da una relación M: M. Pero .NET Entity Framework no se regonizó cuando cambié la lista usando list.add (item). Entonces mi lista siempre estaba vacía.

Pero de todos modos, gracias por la ayuda! :)

0
Dominic Järmann 13 sep. 2018 a las 07:37