首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择包含特定子元素的对象

选择包含特定子元素的对象
EN

Stack Overflow用户
提问于 2017-06-02 00:22:09
回答 4查看 67关注 0票数 0

我有以下课程。

代码语言:javascript
运行
复制
public class Bin
{
    public int BinId { get; set; }
    public IEnumerable<Component> Components { get; set; }
}

public class Component 
{
    public int ComponentId { get; set; }
    public string ComponentName { get; set; }
}

如何使用LINQ找到所有包含特定组件集的Bin对象,比如ID 1、2、3的组件?

编辑

为了澄清所有ID必须出现在一个Bin中。另外,我有一个包含要匹配的ID的集合。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-06-02 01:09:46

代码语言:javascript
运行
复制
var bins = new List<Bin>();
var ids = new List<int> { 1, 2, 3 };

// go through each bin and make sure it has all the items in ids
bins.Where(x => ids.All(id => x.Components.Select(c => 
    c.ComponentId).Contains(id)));
票数 1
EN

Stack Overflow用户

发布于 2017-06-02 00:26:33

如下所示:

代码语言:javascript
运行
复制
bins.Where(b => b.Components.Any( c => new[]{1,2,3}.Contains(c.ComponentId) )

如果你需要所有:

代码语言:javascript
运行
复制
bins.Where(b => b.Components.All( c => new[]{1,2,3}.Any( i => i == c.ComponentId) ))

或者,如果需要,列表中的某些项具有以下项:

代码语言:javascript
运行
复制
bins.Where(b => new[]{1,2,3}.All(i => b.Components.Any(c => i == c.ComponentId) ))

可以根据需要将子查询中的所有/任意/包含组合在一起

票数 1
EN

Stack Overflow用户

发布于 2017-06-02 00:50:57

代码语言:javascript
运行
复制
IEnumerable<int> test = ...;
bins.Where(x => !test.Except(x.Components.Select(c => c.ComponentId)).Any());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44318998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档