首页 > 解决方案 > LINQ-filer 作为所需模型并将列表添加到 select 语句

问题描述

我需要访问以下列表。Mainlist - 包含设备列表,它将与以下模型一起显示。

public class BTypeModel
{
    public string Image { get; set; }
    public int? id { get; set; }
    public string bName { get; set; }
    public string alterName { get; set; }
    public string number { get; set; }
    public List<MainEquipment> equipment { get; set; }
    public string displayName { get; set; }

}


public class MainEquipment
{
    public int id { get; set; }
    public string name { get; set; }

}

我的问题是我无法访问设备列表

见下

var available = MainList
     .Where(o => o.bType?.id == placeid)
     .Select(s => new BTypeModel {
      displayName = s.Type.name,
      id = s.id,
      number = s.number,
      Image = s.files.FirstOrDefault()?.Image,
      alterName = s.alternateName,
      equipment=s.mainequipmentlist.Select(a=>a.id), *

//选择是给出错误的原因。无论我选择int还是字符串,错误都是一样的,只需更改

“System.Collections.Generic.IEnumerable”无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.Generic.List”。存在显式转换(您是否缺少演员表?)

equipment=s.mainequipmentlist.Select(a=>a.id)

我无法让它显示此列表 -** 错误是可以将 int 转换为通用列表 - **

标签: c#listlinqgrouping

解决方案


equipment类中的属性BTypeModel是 type List<MainEquipment>,您equipment=s.mainequipmentlist.Select(a=>a.id)ids使用 Select() 方法进行投影。

equipment=s.mainequipmentlist.Select(a=>a.id)将返回 IEnumerable 并尝试将其分配给List<MainEquipment>. 这就是错误背后的原因。

要解决此问题,请改为分配s.mainequipmentlistequipment属性。BTypeModel或在forequipmentIds类型中创建新属性并为其IEnumerable<int>分配投影 ID,例如

var available = MainList
     .Where(o => o.bType?.id == placeid)
     .Select(s => new BTypeModel {
           ... 
           equipment = s.mainequipmentlist,  //Either  
           ids = s.mainequipmentlist.Select(a=>a.id) //or solution
           ...
      }

Enumerable.Select 方法


推荐阅读