.Net Как загрузить ViewModel с полями, которых нет в базе данных? - PullRequest
0 голосов
/ 21 марта 2012

Как я могу запросить БД, чтобы получить список элементов, у которых есть поля в дополнение к тому, что описывают модели сущностей>

Скажем, у меня есть модели сущностей, называемые Владельцы и Домашние животные:

public class Owner
{
    public int OwnerID{ get; set; }

    public virtual IEnumerable<Pets> Pets{ get; set; }
}

public class Pet
{
    public int PetID{ get; set; }
    public string PetName{ get; set; }

    public int OwnerID{ get; set; }
    public Owner Owner{ get; set; }
}

Если бы я получил такой список владельцев:

dbContext.Set<Owner>().ToList()

Каждый объект в этом списке будет владельцем с OwnerID и списком их питомцев.

Но что если яЯ хотел бы добавить дополнительное поле для каждого из этих владельцев, например, «HasPets», и иметь список моделей представления, которые принимают это.

public class OwnerViewModel
{
    public int OwnerID{ get; set; }
    public bool HasPets{ get; set; }
}

List<OwnerViewModel> OwnerViewModels = ....(get list with added field)

Я понятия не имею, как запросить в БД включение нового вычисленногополе ...

(я понимаю, что могу просто посчитать Owner.Pets, но я просто хотел сохранить простой пример)

Ответы [ 2 ]

1 голос
/ 21 марта 2012

@ Камьяр в значительной степени прав, единственное, что я бы сделал по-другому, это используйте .Any() вместо .Count() > 0

context.Owners
            .Select(o => new OwnerViewModel
                                {
                                    OwnerID = o.OwnerID,
                                    HasPets = o.Pets.Any().
                                    ...
                                    ...
                                });
0 голосов
/ 21 марта 2012

Что-то вроде

context.Owners.Select(o => new OwnerViewModel() 
                           {Owner = o, HasPets = o.Pets.Any()});  

И определите свою модель вида как:

public class OwnerViewModel
{
    public Owner Owner{ get; set; }
    public bool HasPets{ get; set; }
}

Или вы можете загрузить всех домашних животных на стороне клиента и проверить их там (конечно, не рекомендуется при перегрузке):

public class OwnerViewModel
{
    public Owner Owner{ get; set; }
    public bool HasPets{ get { return this.Owner.Pets.Any(); } }
}  
var ownervms = new List<OwnerViewModel>();
foreach (var owner in context.Owners)
{
    ownervms.Add(new OwnerViewModel() {Owner= owner});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...