首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Linq C#的过滤器(三重)嵌套集合

使用Linq C#的过滤器(三重)嵌套集合
EN

Stack Overflow用户
提问于 2022-05-30 15:55:30
回答 1查看 83关注 0票数 0

我需要过滤集合> Repos >工作流的列表,并以相同的格式返回结果

希望示例是相当清楚的,如果你认为它需要更多的细节,请大声说出来。

代码语言:javascript
复制
    // All classes have a property 'Name'
    // Filter along the branch for any that match and return only the matching items

    List<Collection> AllCollections = new List<Collection>();
    Collection CollectionA = new Collection();
    Collection CollectionB = new Collection();
    CollectionA.Repos = new List<Repo>{new Repo{Name = "FirstRepo", Workflows = new List<Workflow>{new Workflow{Name = "CI-CD"}, new Workflow{Name = "Tests"}, new Workflow{Name = "First-Ops"}}}, new Repo{Name = "SecondRepo", Workflows = new List<Workflow>{new Workflow{Name = "CI-CD"}, new Workflow{Name = "Testing"}, new Workflow{Name = "Second-Ops"}}}, new Repo{Name = "ThirdRepo", Workflows = new List<Workflow>{new Workflow{Name = "CI-CD"}, new Workflow{Name = "Testers"}, new Workflow{Name = "Third-Ops"}}}};
    CollectionB.Repos = new List<Repo>{new Repo{Name = "FronEndUI", Workflows = new List<Workflow>{new Workflow{Name = "CD"}, new Workflow{Name = "UI-Tests"}, new Workflow{Name = "first-Op"}}}, new Repo{Name = "API", Workflows = new List<Workflow>{new Workflow{Name = "CI"}, new Workflow{Name = "Testing"}, new Workflow{Name = "second-Op"}}}, new Repo{Name = "VisualBasic", Workflows = new List<Workflow>{new Workflow{Name = "Deploy"}, new Workflow{Name = "Copy"}, new Workflow{Name = "third-Op"}}}};
    AllCollections.Add(CollectionA);
    AllCollections.Add(CollectionB);
    // Filter 
    string FilterString = "";  // string FilterString = "Copy" , should return  AllCollections > CollectionB > Repo VisualBasic > Workflow Deploy
    // Result should be List of collections > List of Repos > List of workflows
    List<Collection> result = AllCollections.SelectMany(c => c.Repos.Where(r => r.Name.Contains(FilterString.ToLower())).ToList().SelectMany(w => w.Workflows.Where(w => w.Name.Contains(FilterString)))).ToList();
    // Dont know how to show nested list in a table sorry
    // This is returning the workflows but not the parent Repo and Repo's Parent, The Collection



public class Collection
{
    public string Name { get; set; }

    public List<Repo> Repos { get; set; }
}

public class Repo
{
    public string Name { get; set; }

    public List<Workflow> Workflows { get; set; }
}

public class Workflow
{
    public string Name { get; set; }
}

请看这里,多管乐器

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-30 19:14:43

使用这种特殊的过载

“将序列的每个元素投影到IEnumerable中,将结果序列平坦为一个序列,并对其中的每个元素调用结果选择器函数。”

代码语言:javascript
复制
var result =
   AllCollections
       .SelectMany(collection => collection.Repos,
           (collection, repo) => new {collection, repo})
       .SelectMany(collectionAndRepo => collectionAndRepo.repo.Workflows,
           (collectionAndRepo, workflow) => new {collectionAndRepo, workflow})
       .Where(collectionAndRepoAndWorkflow =>
           collectionAndRepoAndWorkflow.collectionAndRepo.collection.Name
               .Contains(FilterString)
           || collectionAndRepoAndWorkflow.collectionAndRepo.repo.Name.Contains(
               FilterString)
           || collectionAndRepoAndWorkflow.workflow.Name.Contains(FilterString))
       .GroupBy(crw => crw.collectionAndRepo.collection.Name,
           (collectionName, repoAndWorkflow) =>
               new Collection
               {
                   Name = collectionName,
                   Repos = repoAndWorkflow.GroupBy(
                       rw => rw.collectionAndRepo.repo.Name,
                       (repoName, workflows) => new Repo()
                       {
                           Name = repoName,
                           Workflows = workflows.Select(w => new Workflow()
                               {Name = w.workflow.Name}).ToList()
                       }).ToList()
               }).ToList();

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72437039

复制
相关文章

相似问题

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