使用Linq c#在集合中筛选集合

x4shl7ld  于 2022-12-15  发布在  C#
关注(0)|答案(1)|浏览(214)

我有以下的收藏。我怎样得到包含一个或多个以“ABC”开头的类别名称的玩具列表。在收藏中返回的玩具只能包含名称包含“ABC”的类别,而忽略其他不是以“ABC”开头的类别名称。
因此,下面的示例将返回一个包含一个玩具(name=teddy1)的集合,其中只有两个Cartegoris,忽略以“XYZ”开头的Category

var toys = new List<Toy>()
    {
        new Toy()
        {
            name = "teddy1",
            category = new List<Category>()
            {
                new Category()
                {
                    Name = "ABC xxx"
                },
                new Category()
                {
                    Name = "XYZ yyy"
                },
                new Category()
                {
                    Name = "ABC zzz"
                },
            }
        },
        new Toy()
        {
            name = "teddy2",
            category = new List<Category>()
            {
                new Category()
                {
                    Name = "AAA"
                }
            }
        }
    };
sdnqo3pr

sdnqo3pr1#

你需要过滤主数组,然后对每个需要过滤的项目过滤类别列表。你可以像下面这样实现:

var targetCategoryName = "ABC";

var targetList = tosy
    .Where(r=> r.Categories.Any(q=> q.Name.StartsWith(targetCategoryName)))
    .Select(r=> new Toy()
    {
        name = r.Name,
        Categories = r.Categories
            .Where(q => q.Name.StartsWith(targetCategoryName))
            .ToList()
    })
    .ToArray();

相关问题