使用linq查询集合的子集合

时间:2010-06-20 00:54:14

标签: c# linq

我有一系列产品,每个产品对象都有自己的ProductImages集合。每个ProductImage对象都有一个IsMainImage bool字段。我很难建立像这样的Linq查询:

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

任何人都可以帮我解决这个问题,请指点我在线资源,我可以学习如何编写这样的linq查询,或两者兼而有之?

感谢您的帮助!

3 个答案:

答案 0 :(得分:12)

尝试类似

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

我还找到了101 linq queries的这个列表,其中可能包含了很好的信息。

答案 1 :(得分:5)

您也可以使用.SelectMany()投影方法。

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

答案 2 :(得分:3)

编写查询的另一种方法是选择第一个图像作为产品1的主图像:

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

我认为这比嵌套的from子句(通常用于连接和类似的构造)更具可读性。使用First也可能更有效,但这只是猜测(而且很可能无关紧要)