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/

10-14 00:34