如何在序列中获得linq中的元素范围

本文关键字:linq 元素 范围 | 更新日期: 2023-09-27 17:49:41

我有这个查询集合:

Panel thePanel = menuCell.Controls.OfType<Panel>()
                    .Where(panel => panel.Controls.OfType<HyperLink>().Any(
                        label => label.ID == clas))
                    .FirstOrDefault();

这只获取具有特定id的超链接的Panel。我不仅需要得到firstOrDefault,还需要得到匹配的元素(只有第一个)和序列中的下一个。我什么都没试,因为我不知道怎么做。

如何在序列中获得linq中的元素范围

这将返回前三个面板,它们具有具有特定id

的超链接。
var thePanels = menuCell.Controls.OfType<Panel>()
                    .Where(panel => panel.Controls.OfType<HyperLink>()
                                         .Any(label => label.ID == clas))
                    .Take(3);

如果你需要第一个面板有一个特定id的超链接,接下来的两个面板无论他们有:

var thePanels = menuCell.Controls.OfType<Panel>()
                        .SkipWhile(panel => !panel.Controls.OfType<HyperLink>()
                                                 .Any(label => label.ID == clas))
                        .Take(3);

如果您想找到具有指定条件的一个面板,然后取它,然后取两个面板,无论它们是否满足条件,您可以:

IEnumerable<Panel> thePanelAndTwoNext = menuCell.Controls.OfType<Panel>()
                .SkipWhile(panel => !panel.Controls.OfType<HyperLink>()
                                       .Any(label => label.ID == clas))
                .Take(3);