我有很多实例,两个类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/