【问题标题】:How do I get the second element in a collection, using LINQ? [duplicate]如何使用 LINQ 获取集合中的第二个元素? [复制]
【发布时间】:2015-11-23 00:47:33
【问题描述】:

我有一个愚蠢的问题。我有一个数据库,我需要获得第二个项目,而不仅仅是第一个。我打开第一个简单的方法

var source = _context.SourceLogs.Where(a => a.SourceID == user.ID).First()

但我不知道如何打开第二个。我是 C# 新手,所以我唯一想到的就是这个

var source = _context.SourceLogs.Where(a => a.SourceID == user.ID).First(-1)

但这显然行不通。任何形式的帮助表示赞赏。谢谢。

【问题讨论】:

  • 我不确定,但我认为您无法使用 First() 获取第二个元素,也许您应该尝试获取 SourceLogs 列表,然后使用索引 1 获取第二个元素。或者使用描述第二个元素的特定条件。

标签: c# linq


【解决方案1】:
var source = _context.SourceLogs.Where(a => a.SourceID == user.ID).ElementAt(1);

【讨论】:

  • 这将选择第三项而不是第二项
  • 当然,你是对的。我做出了改变。
【解决方案2】:

试试这个:

var source = _context.SourceLogs.Where(a => a.SourceID == user.ID).OrderBy(a => a.SourceID).Skip(1);

更新:如果您只想获取列表中的第二项,可以在查询末尾添加.First()

var source = _context.SourceLogs.Where(a => a.SourceID == user.ID).OrderBy(a => a.SourceID).Skip(1).First();

【讨论】:

  • 重要的是要注意这不会返回单个项目,而是一个 IEnumerable.with 一个项目。
【解决方案3】:

你可以使用

var source = _context.SourceLogs.Where(a => a.SourceID == user.ID).ToList();

然后方便时查询源列表

【讨论】:

  • 这不是一个好的通用解决方案。这将从数据库中提取与 SourceId 匹配的整个 SourceLogs 列表,而不仅仅是其中的第一个。
  • 这就是我说“方便”的原因,这样可以最大限度地减少对上下文的调用。
  • @AvnerShahar-Kashtan Skip 也会这样做,所以这不是实际问题。但是它不会从列表中提取第二项
【解决方案4】:

您可以跳过第一个并从中获取第一个。

var source = _context.SourceLogs.Where(a => a.SourceID == user.ID).Skip(1).First()

【讨论】:

    【解决方案5】:

    您可以使用 LINQ 的 Skip 方法跳过第一个并获取后面的一个:

    var source = _context.SourceLogs.Where(...).Skip(1).First();
    

    Skip 所做的是创建一个新的 IEnumerable,其中包含除第一个以外的所有项目。然后,您获取该新 IEnumerable 的 First()。

    【讨论】:

    • 事实上已经有一个 LINQ 方法可以解决这个问题:ElementAt。请在下面查看我的答案?。
    猜你喜欢
    • 2017-03-11
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2014-08-19
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多