.Net如何加载带有字段的ViewModel;数据库中不存在
本文关键字:ViewModel 字段 数据库 不存在 何加载 加载 Net | 更新日期: 2023-09-27 18:28:40
我如何查询DB以返回除实体模型描述之外还包含字段的项目列表>
假设我有实体模型称为主人和宠物:
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,但我只是想让例子简单一点)
@Kamyar非常正确,我唯一会做的不同之处是使用.Any()
而不是.Count() > 0
context.Owners
.Select(o => new OwnerViewModel
{
OwnerID = o.OwnerID,
HasPets = o.Pets.Any().
...
...
});
类似的东西
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});
}