【发布时间】:2016-09-30 13:01:34
【问题描述】:
如果我在列表中的类中有一个列表,其中类的定义如下:
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 类包含来自 Class1 和 Class2 的值。
像这样:
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?)
注意:
重复项没有回答问题,因为当结果列表是内部类列表并使用内部类的属性时,它们没有解决问题。
【问题讨论】:
-
@CodeCaster 当属性之一在外部类而不是列表中时,我应该如何使用 SelectMany 做到这一点?
-
我建议您编辑标题和问题以说明您希望包含来自父对象的数据。事实上,“如何展平列表列表”的直接答案是“使用 SelectMany”。代码中丢失了一个重要的区别
-
您也没有列表列表,您有父对象和子对象的列表。
-
@PanagiotisKanavos 编辑好点了吗?我在想出一个标题时遇到了麻烦,因此感谢您提供任何帮助