2012-03-21 84 views
0

我怎样才能查询数据库返回的是除了拥有什么样的实体模型描述领域的项目清单>的.Net如何加载与字段视图模型不存在于数据库中?

说我有实体模型称为业主和宠物:

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”,并有一个接受的ViewModels的名单是什么。

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

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

我不知道如何查询数据库,包括一个新的计算字段...

(我知道我可以简单地做Owner.Pets计数,但我只是想保持例如简单)

回答

0

喜欢的东西

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}); 
} 
+0

真棒,谢谢。顺便说一下,这种技术叫做什么(如果有它的名字的话)。我的意思是,你如何用一般术语来描述这个解决方案? – getit 2012-03-21 02:30:00

+1

没有什么,我所知道的。然而,映射数据库,提取实体在解决方案中使用的模型在DDD模式使用。这是在你的层trasnferring的波苏斯被称为的DTO(数据传输对象)。谷歌它,你会发现一些很好的教程。 – Kamyar 2012-03-21 02:32:49

+0

完美,再次感谢 – getit 2012-03-21 02:39:15

1

@Kamyar是非常正确的,我唯一会做不同在使用.Any(),而不是.Count() > 0

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

你说得对。 'Any()'更适合。更新了我的示例。 – Kamyar 2012-03-21 02:28:53

+0

谢谢,有没有特别的理由不使用count?我的猜测是计数可能效率低下,因为它必须查询每个现有的行,而任何将在第一次查找后退出搜索。我甚至关闭? – getit 2012-03-21 02:32:36

+1

@getit看看http://blogs.teamb.com/craigstuntz/2010/04/21/38598/关于Count()vs Any() – Kamyar 2012-03-21 02:35:19

相关问题