【发布时间】:2018-04-23 05:38:29
【问题描述】:
如何获取子列表的 N 个元素?假设我想为每个父母生 2 个孩子。
public class Program
{
static void Main(string[] args)
{
var data = new List<Parent>()
{
new Parent()
{
Id = 1,
Name = "ParentName1",
Children = new List<Child>()
{
new Child() { Id = 1, Name = "ChildName1"},
new Child() { Id = 2, Name = "ChildName2"},
new Child() { Id = 3, Name = "ChildName3"},
new Child() { Id = 4, Name = "ChildName4"},
new Child() { Id = 5, Name = "ChildName5"},
}
},
new Parent()
{
Id = 2,
Name = "ParentName2",
Children = new List<Child>()
{
new Child() { Id = 6, Name = "ChildName6"},
new Child() { Id = 7, Name = "ChildName7"},
new Child() { Id = 8, Name = "ChildName8"},
new Child() { Id = 9, Name = "ChildName9"},
new Child() { Id = 10, Name = "ChildName10"},
}
}
};
// Get only 2 child elements for parent
var filteredData = data.Where(x => x.Children.Count >= 2)
.ToList();
foreach (var filteredParent in filteredData)
{
Console.WriteLine($"Parent {filteredParent.Id} with {filteredParent.Children.Count} children.");
}
Console.ReadKey();
}
}
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
public string Name { get; set; }
public Parent Parent { get; set; }
}
【问题讨论】:
-
data.SelectMany(x => x.Children.Take(2)) -
试试
var filteredData = data.Where(x => x.Children.Count >=2).SelectMany(x => x); -
@SlavaUtesinov:这是一个答案,而不是评论。
-
@user3261186:这是一个答案,而不是评论。这也不是OP所要求的。如果有两个以上的孩子,他们不会要求整个孩子列表;他们要求每个列表的前两个孩子。
-
@Flater 实际上,我认为 Slava 的评论也不是 OP 想要的。如果您注意到问题中代码中的 foreach 循环,您会看到 OP 正在寻找父母,但过滤掉除了每个父母的前 2 个之外的所有孩子。