我有很多实例,两个类ChildrenAnimal具有多对多实体关系。

我想要一个数据结构,以便给定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

因此ChildAnimal都具有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/

10-13 08:12