我想通过给定的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]”'
在this answer之后,我尝试更改为
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让我觉得我可能需要反过来做。不要检查是否filter.IdIn.Contains(item.Id)
,而不要检查item.Id is in/partof/memberof filter.IdIn
,但这似乎不存在!?
所以精疲力尽: 我有一个具有ushort ID的项目列表。我想在ushort ID列表中找到ID所在的项目。
答案 0 :(得分:2)
不确定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();