【问题标题】:LINQ - Return a List within a ListLINQ - 在列表中返回列表
【发布时间】:2015-06-12 09:50:52
【问题描述】:

我已将我的数据库导入到我的 EF 模型中,并且我正在尝试创建一个返回适当 ViewModel 的 linq 查询。

Items反映了ItemDetailVM

Property反映PropertyVM

ItemsProperty之间有一个导航属性

我尝试编写的 linq 查询如下...

我的问题是如何在 ItemDetailVM 中映射 prop

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

【问题讨论】:

  • 每个属性是否都引用了一个项目,或者您想要每个项目中的完整属性列表吗?
  • 看起来你想eagerly load列表...stackoverflow.com/questions/3186009/…
  • 我不想要完整的属性列表,而是一个子集。急切加载将加载所有属性
  • 您要应用什么条件来过滤属性?

标签: c# linq


【解决方案1】:

试试这个:

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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多