gpt4 book ai didi

c# - 如何从包含子对象的父对象列表中提取数据?

转载 作者:太空宇宙 更新时间:2023-11-03 18:58:35 24 4
gpt4 key购买 nike

如果我在列表中的类中有一个列表,其中类的定义如下:

class Class1
{
public int Id { get; set; }

public List<Class2> Class2s { get; set; }
}

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

public string Value { get; set; }
}

我可以创建一个 Result 类型的列表,其中 Result 是:

class Result
{
public int Class1Id { get; set; }

public string Name { get; set; }

public string Value { get; set; }
}

请注意,Result 类包含来自 Class1Class2 的值。

像这样:

var results = new List<Result>();
foreach (var class1 in class1s) //class1s is a List of Class1
{
foreach (var class2 in class1.Class2s)
{
results.Add(new Result()
{
Class1Id = class1.Id,
Name = class2.Name,
Value = class2.Value,
};
}
}

如何通过 linq 查询执行此操作?

我尝试了以下方法:

IList<Result> list = class1s.Select(c => c.Class2s.Select(c2 => new Result()
{
Class1Id = c.Id,
Type = c2.Type,
Name = c2.Name,
}).ToList()).ToList();

但这失败并出现错误:

Cannot implicitly convert type 'System.Collections.Generic.List<System.Collections.Generic.List<Results>' to 'System.Collections.Generic.IList<Results>'. An explicit conversion exists (are you missing a cast?)

注意:

当结果列表是内部类列表并使用内部类的属性时,重复项没有回答问题,因为它们没有解决问题。

最佳答案

通过使用两个 from 语句,可以很容易地以查询格式从 parent 和 child 的列表中检索数据

var results = from parent in class1s
from child in parent.Class2s
select new Result {
Class1Id = parent.Id,
Name = child.Name,
Value = child.Value,
};
var list=results.ToList();

在流畅的格式中,可以使用SelectMany

var list = class1s.SelectMany(parent => parent.Class2s,
(parent,child)=>
new Result {
Class1Id = parent.Id,
Name = child.Name,
Value = child.Value
}
).ToList();

出于显而易见的原因,我更喜欢第一种形式

注意我使用了 SelectMany接受结果选择器的重载。没有它,我将不得不在第一个选择器函数中使用 Select,导致代码更加繁琐

关于c# - 如何从包含子对象的父对象列表中提取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39792184/

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