.Net Как загрузить ViewModel с полями, которые не существуют в базе данных?

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

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

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; }
}
</pets>

Если бы у меня был список владельцев вроде этого:

dbContext.Set<owner>().ToList()
</owner>

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

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

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

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

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

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

2 ответа

Что-то вроде

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});
}
</ownerviewmodel>


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

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

licensed under cc by-sa 3.0 with attribution.