gpt4 book ai didi

c# - LINQ:如何将内部列表中的项目放入一个列表中?

转载 作者:IT王子 更新时间:2023-10-29 04:01:52 26 4
gpt4 key购买 nike

具有以下类(高度简化):

public class Child
{
public string Label;
public int CategoryNumber;
public int StorageId;
}

public class Parent
{
public string Label;
public List<Child> Children = new List<Child>();
}

并具有以下数据:

var parents = new List<Parent>();

var parent = new Parent() {Label="P1"};
parent.Children.Add(new Child() {Label="C1", CategoryNumber=1, StorageId=10});
parent.Children.Add(new Child() {Label="C2", CategoryNumber=2, StorageId=20});
parents.Add(parent);

parent = new Parent() {Label="P2"};
parent.Children.Add(new Child() {Label="C3", CategoryNumber=1, StorageId=10});
parent.Children.Add(new Child() {Label="C4", CategoryNumber=2, StorageId=30});
parents.Add(parent);

parent = new Parent() {Label="P3"};
parent.Children.Add(new Child() {Label="C5", CategoryNumber=3, StorageId=10});
parent.Children.Add(new Child() {Label="C6", CategoryNumber=2, StorageId=40});
parents.Add(parent);

现在,我如何从至少包含一个 CategoryNumber = 1 的 child 的 parent 列表中获取 child 列表(CategoryNumber = 2)?

我可以执行以下操作,但它似乎不是最优的:

var validParents = from p in parents
where p.Children.Any (c => c.CategoryNumber==1)
select p;
var selectedChildren = validParents.Select(p => from c in p.Children
where c.CategoryNumber == 2
select c);

这是我为 selectedChildren 得到的:

  • IEnumerable<IEnumerable<Child>>
    • IEnumerable<Child>
      • C2 2 20
    • IEnumerable<Child>
      • C4 2 30

是否有可能只有一个平面列表包含两个子元素而不是两个子列表?它在 LINQ 中如何翻译?

最佳答案

您可以使用 SelectMany 将几个查询串联在一起和 Where .

var selectedChildren = (from p in parents
where p.Children.Any (c => c.CategoryNumber==1)
select p)
.SelectMany(p => p.Children)
.Where(c => c.CategoryNumber == 2);

// or...

var selectedChildren = parents
.Where(p => p.Children.Any(c => c.CategoryNumber == 1))
.SelectMany(p => p.Children)
.Where(c => c.CategoryNumber == 2);

关于c# - LINQ:如何将内部列表中的项目放入一个列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1028605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com