Отображение сложного объекта с использованием C # и Linq-to-entity - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть два класса домена:

var ParentClass
{
    public Guid Id { get; set; }
    public virtual IEnumerable<ChildClass> Children { get; set; }
}
var ChildClass
{
    public Guid Id { get; set; }
    public Guid ParentId { get; set; }
    public virtual ParentClass Parent{ get; set; }
}

как получить список ParentClass, сопоставить его и все его дочерние элементы двум предопределенным моделям представления («PClass» для сопоставления ParentClass и «ChClass»сопоставить ChildClass)?

Я пробовал этот код, но он не работает:

var query = MyDataContext.ParentClasses.Select(x => new PClass
{
    Id = x.Id,
    Children = x.Children.Select(y => new ChClass // this select is not working
    {
        Id = y.Id,
        ParentId = y.ParentId,
        Parent = x // x is not the right type and it should be of type 'PClass'
    })
}).ToList();

1 Ответ

0 голосов
/ 21 ноября 2018

Если у каждого PClass есть ноль или более дочерних элементов, заполнять родительский класс каждого дочернего класса довольно бесполезно, поскольку вы уже знаете, что это PClass.

Кроме того, этот родительский элемент в дочернем классеесть по крайней мере один ребенок с PClass, в котором, конечно, есть по крайней мере один ребенок с родителем, у которого есть по крайней мере один ребенок с родителем, ... когда вы хотите остановиться?

В таких случаях мы либо склонны не предоставлять свойство Родителю, либо присваивать ему нулевое значение:

var query = MyDataContext.Parents.Select(parent => new PClass
{
    Id = parent.Id,
    Children = parent.Children.Select(child => new ChClass
    {
        Id = child.Id,
        // ParentId = y.ParentId, Useless, you know it has the same value as Id
        // Parent = ... useless, you know it has the same value as the parent
        // that you are creating.
    })
    .ToList(),
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...