public class Parent
{
public int ParentId { get; set; }
public string ParentPropertyA { get; set; }
public string ParentPropertyA { get; set; }
public List<Child> Children{get; set;}
}
public class Child
{
public int ChildId { get; set; }
public string ChildPropertyA { get; set; }
public string ChildPropertyB { get; set; }
}
private static Expression<Func<Parent, dynamic>> BuildModel()
{
return x => new
{
x.ParentId,
x.Children
};
}
我在
IQueryable.Select(BuildModel())
上使用此表达式假设我有一个
Parent
对象,其中有两个Children
...给定这种结构,我如何才能实现返回具有所有
Parent
属性和特定Children
的两个记录,而不是仅返回带有两个Parent
的一个Children
?例:
{
ParentId: 1,
ParentPropertyA: "parentA",
ParentPropertyB: "parentB",
Children:
[
{
ChildId: 1,
ChildPropertyA: "childA1",
ChildPropertyB: "childB1"
},
{
ChildId: 2,
ChildPropertyA: "childA2",
ChildPropertyB: "childB2"
}
]
}
相反,我想让它们返回为:
[
{
ParentId: 1,
ParentPropertyA: "parentA",
ParentPropertyB: "parentB",
ChildId: 1,
ChildPropertyB: "childB1"
},
{
ParentId: 1,
ParentPropertyA: "parentA",
ParentPropertyB: "parentB",
ChildId: 2,
ChildPropertyB: "childB2"
}
]
这可能吗?谢谢!
最佳答案
在父集合上使用SelectMany
。在SelectMany表达式中,选择子项,并将其与父项副本配对。
var flattenedList = parents.SelectMany
(
p => p.Children.Select
(
c => new { Parent = p, Child = c }
)
);
这将为您每个孩子提供一个要素,并根据需要复制父母。
关于c# - C#Linq IQueryable选择展平的嵌套对象列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49038885/