【问题标题】:How to get the last object in a generic list?如何获取通用列表中的最后一个对象?
【发布时间】:2009-10-05 16:25:40
【问题描述】:

我正在将填充的 SelectList 传递给我的视图,并且我想将所选值默认为列表中的 last 记录。到目前为止,我得到了:

IQueryable<BuildNumber> projBuildNos = tcRepository.GetProjectBuildNos();
BuildList = new SelectList(projBuildNos, "ID", "value", projBuildNos.Last().ID);

我收到一个异常,提示“不支持查询运算符 'Last',但我似乎无法获取通用列表中的最后一条记录,也找不到任何示例。

此代码来自“表单视图模型”,将选择列表从我的存储库传递回视图,我认为我应该在这里执行此操作。不过我是 generics/mvc/linq 的新手,所以很高兴有其他建议。

提前感谢您的帮助。如果您想了解更多信息,请告诉我。

【问题讨论】:

    标签: c# generics iqueryable


    【解决方案1】:

    您是否已经将查询中的所有结果都存储到内存中?如果是这样,我建议您执行查询并将结果放入列表中:

    List<BuildNumber> projBuildNos = tcRepository.GetProjectBuildNos().ToList();
    BuildList = new SelectList(projBuildNos, "ID", "value", projBuildNos.Last().ID);
    

    否则,您很容易得到一个执行两次查询的解决方法 - 可能会给出不一致的结果。

    【讨论】:

    • 是的,我正在填充 SelectList,因此我正在使用所有结果集。成功了,干杯!
    【解决方案2】:

    我在 MSDN 上找到了这个:

    Queryable.LastOrDefault -- 返回序列中的最后一个元素,如果序列不包含任何元素,则返回默认值。

    【讨论】:

    • 这可能涉及对数据库的另一个调用吗?如果是这样,我想我已经获得了所有数据,所以只想获取最后一个值。
    【解决方案3】:

    也许是这个?

    projBuildNos.Reverse().First().ID
    

    【讨论】:

      猜你喜欢
      • 2011-11-02
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多