抱歉,我刚才问了一个类似的问题,但我意识到我搞错了......
我有一个对象 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" } },
};
根据您的口头要求/描述。我创建了一个原型。 对于每个 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; }
}