代码之家  ›  专栏  ›  技术社区  ›  Jeff

无法转换WhereListIterator

  •  0
  • Jeff  · 技术社区  · 7 年前

    我想根据给定的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>
    

    找回wherelistaterator让我觉得我可能需要反过来做。不要检查是否 filter.IdIn.Contains(item.Id) 但是检查一下 item.Id is in/partof/memberof filter.IdIn 但这似乎不存在!?

    所以 煮干 : 我有一个有ushort Id的项目列表。我想在ushort Id列表中找到Id的项目。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Sean O'Neill    7 年前

    不确定ListIterator在哪里(不确定这是否是翻译的一部分)

    我希望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();