Skip to main content
 首页 » 编程设计

c#之LINQ 在列表中选择列表

2024年06月20日32pander-it

我正在尝试使用 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; 行的问题,因为我需要将数据分配回 CallGuideMenuL1CallGuideMenuL2 的属性

有人可以围绕正确的 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();