我有很多实例,这两个类 Children
和 Animal
具有多对多 实体关系。
我想要一个数据结构,在给定一个 Children
的情况下,我可以获得映射到它的 Animal
列表,反之亦然。对于任何给定的 Animal
,我可以获得映射到它的 Children
的列表。
我需要这个数据结构是并发的,这样它就可以被任何线程访问。
所以给出一个示例映射:
Child1 -> Animal1
Child1 -> Animal2
Child1 -> Animal3
Child2 -> Animal2
Child2 -> Animal3
Child3 -> Animal3
查询 Child1
我希望得到一个返回列表:[ Animal1, Animal2, Animal2 ]
。
查询Animal2
我希望得到一个返回列表:[ Child2, Child3 ]
。
我能想到的唯一方法是使用字典和字典中每个项目的列表(包括动物和 child ),但我还必须处理锁定列表的同步,这很麻烦。
最佳答案
我认为您必须将数据结构分成三层。
Child <- ChildToAnimalRelation -> Animal
所以 Child
和 Animal
都有 ChildToAnimalRelation
的集合
public class ChildToAnimalRelation
{
public Child Child { get; set; }
public Animal Animal { get; set; }
}
获取一个动物 child 将按如下方式完成:
var children = currentAnimal.ChildToAnimalRelations.Select(r => r.Child);
反之亦然:
var animals = currentChild.ChildToAnimalRelations.Select(r => r.Animal);
关于c# - 我在这里使用什么数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15477574/