无法转换WhereListIterator

时间:2018-08-03 01:02:38

标签: c# linq

我想通过给定的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所在的项目。

1 个答案:

答案 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();