我正在尝试使用 LINQ 查询我的数据库来填充列表中的列表。
我面临的问题是我不确定如何将数据选择到子列表中。
当尝试执行下面的代码时,我收到错误
Error 1 Cannot implicitly convert type 'System.Linq.IQueryable' to 'System.Collections.Generic.IEnumerable'. An explicit conversion exists (are you missing a cast?)
模型类是这样的:
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; }
}
和数据库上下文:
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; }
}
在我的 Controller 中,我尝试像这样选择数据:
_LayoutViewModel vm = new _LayoutViewModel();
vm.CGL1 = from a in db.CallGuideArea
.SelectMany(p => p.CallGuideProducts)
select a;
我很确定这是 select a;
行的问题,因为我需要将数据分配回 CallGuideMenuL1
和 CallGuideMenuL2 的属性
。
有人可以围绕正确的 LINQ 表达式为我指明正确的方向吗?
请您参考如下方法:
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();