使用 LINQ 查询集合的子集合。

17

我有一个产品集合,每个产品对象都有自己的ProductImages集合。每个ProductImage对象都有一个IsMainImage布尔字段。我很难构建这样的Linq查询:

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

有人能帮我弄清楚这个问题吗,或者指引我学习如何编写像这样的Linq查询的在线资源,或两者兼备?

感谢您的帮助!

3个回答

13

尝试类似以下的代码:

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

我还发现了这个101 Linq查询列表,其中可能包含对你有用的信息。


1
我通常会查看那个页面 -- 我可以在哪里找到这个示例的名称?非常感谢,等我被允许后就会接受 :) - TheGeekYouNeed

7
你还可以使用 .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也可能更有效率,但这只是猜测(并且很可能无关紧要)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接