c# - 无法转换 WhereListIterator
问题描述
我想通过给定的 ID 列表过滤列表,该项目应该“在”
// list is of type List<BaseModel>
// so item is of type BaseModel
// item.Id is of type ushort
// filter.IdIn is of type List<ushort>
List<BaseModel> filtered = (List<BaseModel>)
from item in list
where filter.IdIn.Contains(item.Id)
select item;
这会引发错误(我从德语翻译成英语 - 愚蠢的我用德语安装了 VisualStudio ..):
System.InvalidCastException:'
“WhereListIterator`1[JeffData.BaseModel]”类型的对象无法转换为
“System.Collections.Generic.List`1[JeffData.BaseModel]”'
按照这个答案,我尝试更改为
List<BaseModel> filtered = (List<BaseModel>)
from item in list
where filter.IdIn.ToList().Contains(item.Id)
select item;
和
List<BaseModel> filtered = (List<BaseModel>) list.Where(item =>
filter.IdIn.ToList().Contains(item.Id)
);
// with or without ToList()
它都会抛出相同的错误。
当我不尝试将其投射到列表时,
var filtered = list.Where(item => filter.IdIn.Contains(item.Id));
没有抛出错误(因为它不会编译)并且filtered
只是一个'WhereListIterator'并且我不能返回它
return filtered; // as a List<BaseModel>
取回 WhereListIterator 让我觉得我可能需要反过来做。不要检查 iffilter.IdIn.Contains(item.Id)
而是检查 if item.Id is in/partof/memberof filter.IdIn
,但这似乎不存在!?
所以归结为:我有一个具有超短 ID 的项目列表。我想找到 Ids 在 ushort Ids 列表中的项目。
解决方案
不确定 WhereListIterator (不确定这是否是翻译的一部分)
我希望 Where() 返回一个不会强制转换为列表的 IEnumerable。
不过,这就是 ToList() 将为您解析可枚举的地方。
var filtered = list.Where(item => filter.IdIn.Contains(item.Id)).ToList();
或者,如果您愿意:
var filtered = (from item in list
where filter.IdIn.ToList().Contains(item.Id)
select item).ToList();
推荐阅读
- reactjs - 异步不显示结果
- javascript - 如何调用对象中的方法
- javascript - 文件加载器似乎不适用于标签
- php - 如何在 TYPO3 v9 单元测试中模拟、使用或覆盖 Environment::isCli()
- javascript - 通过单个 google 分析属性跟踪未定义的通配符子域
- c++ - 如何复制多态对象
- neo4j - 获取配置文件计划每个部分的执行时间
- wpf - 如何让 WPF DataGrid 列绑定到枚举?
- azure - 如何在 Windows server 2019 上使用 DSC powershell 配置和安装 nano 服务器
- microsoft-graph-api - 如何创建传播到与会者副本的 openType 扩展?