如何使用 LINQ / C# 将 ObjectA 列表与 ObjectB 进行透视,以便返回一个 ObjectB 列表,每个对象都有自己的 ObjectA 列表

问题描述 投票:0回答:1

抱歉,我刚才问了一个类似的问题,但我意识到我搞错了......

我有一个对象 A 的列表,该列表中有一个类型为对象 B 的属性。对象 B 又包含对象 A 的列表。

这是我的两堂课:

public class ObjectA
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Other redacted properties that also need to be returned]
    public int ObjectBId { get; set; }
    public ObjectB ObjectB { get; set; }
}

public class ObjectB
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Other redacted properties that also need to be returned]
    public List<ObjectA> ObjectA { get; set; }
}

如果我有一个 ObjectA 列表,每个对象都有一个 ObjectBId/ObjectB,其中一些 ObjectB 可能在 ObjectAs 之间共享,我如何旋转这个列表,以便我可以返回一个不同的 ObjectB 列表,每个对象都有自己的列表对象A.

例如,如果我有一个如下所示的 ObjectAs 列表:

身份证 对象BId
1 1
2 2
3 2

如何返回 2 个 ObjectB 的列表,其中 ObjectB 1 有一个包含一个 ObjectA(Id:1)的列表,ObjectB 2 有一个包含两个 ObjectA(Id:2 + 3)的列表。我需要返回与 ObjectA 关联的所有属性,而不仅仅是 ID。

我尝试包含用于设置 ObjectA 列表的可重现代码:

List<ObjectA> listObjectA = new List<ObjectA>
{
    new ObjectA { Id = 1, Name = "ObjectA1", ObjectBId = 1, ObjectB = new ObjectB { Id = 1, Name = "ObjectB1" } },
    new ObjectA { Id = 2, Name = "ObjectA2",  ObjectBId = 2, ObjectB = new ObjectB { Id = 2, Name = "ObjectB2" } },
    new ObjectA { Id = 3, Name = "ObjectA3",  ObjectBId = 2, ObjectB = new ObjectB { Id = 2, Name = "ObjectB2" } },
};
c# linq
1个回答
0
投票

根据您的口头要求/描述。我创建了一个原型。 对于每个 B 对象,都有一个 A 对象列表(在示例中,B3 对象将为空,因为没有关系)

void Main()
{
    var lstA = new List<ObjectA>(){
        new ObjectA(){Id = 1, Name = "A 1", ObjectBId = 1},
        new ObjectA(){Id = 2, Name = "A 2", ObjectBId = 2},
        new ObjectA(){Id = 3, Name = "A 3", ObjectBId = 2}
    };
    var lstB = new List<ObjectB>(){
        new ObjectB(){Id = 1, Name = "B 1"},
        new ObjectB(){Id = 2, Name = "B 2"},
        new ObjectB(){Id = 3, Name = "B 3"}
    };

    lstB.Select(b => new {
        ID = b.Id,
        Name = b.Name,
        ListOfObjectA = lstA.Where(w=> w.ObjectBId == b.Id).ToList()})
    .Dump();
}

public class ObjectA
{
    public int Id { get; set; }
    public string Name { get; set; }
    
    public int ObjectBId { get; set; }
    public ObjectB ObjectB { get; set; }
}

public class ObjectB
{
    public int Id { get; set; }
    public string Name { get; set; }
    
    public List<ObjectA> ObjectA { get; set; }
}

© www.soinside.com 2019 - 2024. All rights reserved.