2015-04-07 67 views
2

我已经将我的数据库导入到我的EF模型中,并且试图创建返回相应ViewModel的linq查询。LINQ - 返回列表中的列表

项目反映ItemDetailVM

物业反映PropertyVM

之间存在项目导航属性属性

的林奇曲ERY我尝试写低于...

我的问题是我怎么映射道具ItemDetailVM内?

var query = (from items in DbContext.Items 
     select new ItemDetailVM 
     { 
      item1 = items.id, 
      item2 = items.value, 
      //prop = CODE HERE... select new PropertyVM{ ....} 
     }).ToList(); 


class ItemDetailVM 
{ 
    string item1; 
    string item2; 
    List<Property> prop; 
} 

class PropertyVM 
{ 
    string prop1; 
    string prop2; 
    string prop3; 
} 
+0

是否每个属性都有一个项目的引用或你想在每个项目中的物业的完整列表? – jan

+0

看起来像你想“急切地加载”列表... http://stackoverflow.com/questions/3186009/linq-to-entities-eager-loading-using-include – xandercoded

+0

我不想完整的属性列表,但是一个子集。渴望的负载会加载所有的属性 – piris

回答

2

试试这个:

var query = (from items in DbContext.Items 
      select new ItemDetailVM 
      { 
       item1 = items.id, 
       item2 = items.value, 
       prop = items.prop.Select(p=>new PropertyVM{prop1=p.prop1, 
                  prop2=p.prop2, 
                  prop3=p.prop3}).ToList() 
      }).ToList(); 

如果禁用延迟加载,那么你就需要调用Include扩展方法:

var query = (from items in DbContext.Items.Include(i=>i.prop) 
      select new ItemDetailVM 
      { 
       item1 = items.id, 
       item2 = items.value, 
       prop = items.prop.Select(p=>new PropertyVM{prop1=p.prop1, 
                  prop2=p.prop2, 
                  prop3=p.prop3}).ToList() 
      }).ToList(); 
+0

优秀!!谢谢! – piris