代码之家  ›  专栏  ›  技术社区  ›  Ian Vink

列表中项目的LINQ范围<MyObject>

  •  1
  • Ian Vink  · 技术社区  · 14 年前

    使用Linq,我如何得到一个对象列表,其中它们的序数position在5到27之间。

    有一个 未知的 我对象的数目,所以有些东西什么也找不到。

    “所有” 总是按顺序排列,因此需要顺序位置。

    这样地:

    List<MyObject>  allItems = GetAllItems();
    List<MyObject>  myRange = allItems.LINQSTATEMENTHERE(5 to 27th items);
    
    2 回复  |  直到 14 年前
        1
  •  9
  •   Justin Niessner    14 年前

    使用Skip()和Take()的组合:

    int from = 5;
    int to = 27;
    var myRange = allItems.Skip(from - 1).Take(to - from);
    
        2
  •  1
  •   Ani    14 年前

    因为您需要立即执行(您希望将结果加载到列表中),所以这里不需要使用LINQ;您可以使用实例 GetRange 方法打开 List<T> :

    List<MyObject> myRange = allItems.GetRange(from, to - from + 1);
    

    当然,如果你想延迟执行,或者你想将该技术应用到其他类型的序列中,那么就使用Justin Niessner的技术。他的技术的一个好处是,如果没有太多元素来表示范围,它就不会爆炸。