Запросить подсерию коллекции с linq

У меня есть коллекция продуктов, и у каждого продукта есть собственная коллекция ProductImages. Каждый объект ProductImage имеет поле bool IsMainImage. Мне сложно построить запрос Linq следующим образом:

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

Может кто-нибудь помочь мне понять это, указать мне на онлайн-ресурс, где я могу узнать о написании запросов linq, подобных этому, или обоих?

Благодарим за помощь!

Ответ 1

Попробуйте что-нибудь вроде

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

Я также нашел этот список 101 запрос linq, который может содержать хорошую информацию для вас.

Ответ 2

Вы также можете использовать метод .SelectMany().

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

Ответ 3

Другой способ написать запрос - выбрать первое изображение, которое является основным изображением для продукта 1:

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

Я бы подумал, что это более читаемо, чем вложенные предложения from (которые обычно используются для объединений и подобных конструкций). Использование First также может быть более эффективным, но это просто предположение (и это, скорее всего, не имеет значения)