我尝试使用LINQ填充列表中的列表来查询我的数据库。
我面临的问题是,我不确定如何将数据选入子列表。
尝试执行以下代码时,收到错误
错误1无法隐式转换类型System.Linq.IQueryable'到' System.Collections.Generic.IEnumerable'。存在显式转换(您是否错过了演员?)
模型类是这样的:
public class _LayoutViewModel
{
public List<CallGuideMenuL1> CGL1 { get; set; }
}
public class CallGuideMenuL1
{
public string Area { get; set; }
public List<CallGuideMenuL2> Products { get; set; }
}
public class CallGuideMenuL2
{
public int CallGuideProductId { get; set; }
public string Product { get; set; }
}
和DB上下文:
public class CallGuideArea
{
public int CallGuideAreaId { get; set; }
public string Area { get; set; }
public List<CallGuideProduct> CallGuideProducts { get; set; }
}
public class CallGuideProduct
{
public int CallGuideProductId { get; set; }
public string Product { get; set; }
public int CallGuideAreaId { get; set; }
public DateTime Added { get; set; }
public DateTime? Deleted { get; set; }
}
在我的控制器中,我试图选择这样的数据:
_LayoutViewModel vm = new _LayoutViewModel();
vm.CGL1 = from a in db.CallGuideArea
.SelectMany(p => p.CallGuideProducts)
select a;
我非常确定select a;
行是问题因为我需要将数据分配回CallGuideMenuL1
和{{的属性1}}。
有人能指出我正确的LINQ表达方向吗?
答案 0 :(得分:3)
vm.CGL1 = db.CallGuideArea.Select(
a =>
new CallGuideMenuL1
{
Area = a.Area,
Products = a.CallGuideProducts.Select(p => new CallGuideMenuL2{CallGuideProductId=p.CallGuideProductId,Product=p.Product}).ToList()
}).ToList();
答案 1 :(得分:0)
可能vm.CGL1
被声明为List
,因此您需要选择List
:
vm.CGL1 = (from a in db.CallGuideArea
.SelectMany(p => p.CallGuideProducts)
select a).ToList();
或者你需要投射:
vm.CGL1 = (from a in db.CallGuideArea
.SelectMany(p => p.CallGuideProducts)
select new CallGuideMenuL1()
{
Area = a.--some property
...
}).ToList();