2010-06-20 15 views
13

Tengo una colección de productos, y cada objeto de producto tiene su propia colección de ProductImages. Cada objeto ProductImage tiene un campo bool IsMainImage. Estoy teniendo dificultades para la construcción de una consulta LINQ como esto:consultar una subcolección de una colección con linq

select products.productimages.imagename where products.productid == 1 and  
product.productimages.ismainimage == true 

¿Puede alguien ayudarme a resolver esto, que me señale un recurso en línea donde puedo aprender acerca de cómo escribir consultas LINQ como este, o ambas cosas?

¡Gracias por tu ayuda!

Respuesta

11

intentar algo así como

from product in products 
where product.productid == 1 
from image in product.productimages 
where image.ismainimage 
select image.imagename 

También encontraron esta lista de 101 linq queries que puede contener una buena información para usted.

+1

Normalmente miro esa página. ¿Cuál es el nombre del ejemplo que puedo encontrar debajo? muchas gracias, lo aceptaré cuando me lo permitan :) – TheGeekYouNeed

3

Otra manera de escribir la consulta es seleccionar primera imagen que es la imagen principal para obtener el producto 1:

var q = from p in products 
     where p.ProductID == 1 
     select p.ProductImages.First(img => img.IsMainImage); 

yo creo que esto es más fácil de leer que anidados from cláusulas (que se utilizan generalmente para las uniones y construcciones similares). El uso de First también puede ser más eficiente, pero eso es solo una suposición (y es muy probable que no importe)

5

También puede usar el método de proyección .SelectMany() también.

 products.Where(product => product.productid == 1) 
       .SelectMany(product => 
             product.productimages.Where(image => image.ismainimage) 
                  .Select(image => image.imagename) 
          ); 
Cuestiones relacionadas