c# - 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 转换为通用列表 - **
解决方案
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.mainequipmentlist
给equipment
属性。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
...
}
推荐阅读
- python - 如何使用 selenium 抓取表数据?
- node.js - MongooseError:操作 `guild-prefixes.findOne()` 缓冲在 10000 毫秒后超时 discord.js
- javascript - BrowserAuthError:interaction_in_progress - 无法修复,无论找到什么解决方案
- arduino - 液晶显示器上的随机移动字符
- android - Ionic Cordova 对新的 Android Bundle 构建感到困惑
- html - 卡片在主标签内未正确显示
- c# - 绘制 3D 矩形,为您单击的每一侧执行不同的操作
- sql - 在 Hive 视图中屏蔽子字符串
- java - Java 语法和逻辑帮助“?” 和 ”:”
- firebase - Firebase onMessageOpenedApp 不工作