C# .Net如何加载不带';数据库中不存在吗?

C# .Net如何加载不带';数据库中不存在吗?,c#,.net,entity-framework,viewmodel,C#,.net,Entity Framework,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 PetNa

如何查询数据库以返回除实体模型描述的内容外还包含字段的项目列表>

假设我有称为所有者和宠物的实体模型:

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; }
}
公共类所有者
{
public int OwnerID{get;set;}
公共虚拟IEnumerable宠物{get;set;}
}
公营宠物
{
公共int-PetID{get;set;}
公共字符串PetName{get;set;}
public int OwnerID{get;set;}
公共所有者{get;set;}
}
如果我有这样一份业主名单:

dbContext.Set<Owner>().ToList()
dbContext.Set().ToList()
该列表中的每个对象都是具有OwnerID的所有者及其宠物列表

但是,如果我想为这些所有者中的每一个添加一个额外的字段,比如“HasPets”,并提供一个接受该字段的viewmodels列表,该怎么办呢

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

List<OwnerViewModel> OwnerViewModels = ....(get list with added field)
public类ownervewmodel
{
public int OwnerID{get;set;}
公共布尔HasPets{get;set;}
}
List OwnerViewModels=..(使用添加的字段获取列表)
我不知道如何查询数据库以包含新的计算字段

(我意识到我可以简单地依靠Owner.Pets,但我只想让这个例子简单一些)

类似于

context.Owners.Select(o => new OwnerViewModel() 
                           {Owner = o, HasPets = o.Pets.Any()});  
并定义viewmodel,如下所示:

public class OwnerViewModel
{
    public Owner Owner{ get; set; }
    public bool HasPets{ get; set; }
}
或者,您可以在客户端加载所有宠物,并在那里检查它们(当然不建议过载):

public类ownervewmodel
{
公共所有者{get;set;}
public bool HasPets{get{返回this.Owner.Pets.Any();}
}  
var ownervms=新列表();
foreach(context.owner中的var所有者)
{
Add(新的OwnerViewModel(){Owner=Owner});
}

@Kamyar说得很对,唯一不同的是使用
.Any()
而不是
.Count()>0

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

太棒了,谢谢。顺便问一下,这种技术叫什么(如果有名字的话)。我的意思是,你如何用一般术语描述这个解决方案?我不知道。然而,将数据库获取的实体映射到解决方案中使用的模型在DDD模式中使用。在层中传输的POCO称为DTO(数据传输对象)。用谷歌搜索一下,你会发现一些不错的教程。谢谢,有什么特别的理由不使用count吗?我的猜测是,计数可能效率低下,因为它必须查询所有现有行,而任何行在第一次找到后都将停止搜索。我真的很接近吗?@getit看看Count()和Any()的比较
context.Owners
            .Select(o => new OwnerViewModel
                                {
                                    OwnerID = o.OwnerID,
                                    HasPets = o.Pets.Any().
                                    ...
                                    ...
                                });