如何在linq中获取第二条记录到sql

时间:2009-05-05 12:30:20

标签: linq linq-to-sql

我有一张汇率表。我需要获得当前的费率和以前的费率,然后比较结果。

我可以使用FirstOrDefault获得第一条记录。

当我使用ElementAtOrDefault时,此错误显示“不支持查询运算符'ElementAtOrDefault'”。我怎样才能获得第二张唱片?

8 个答案:

答案 0 :(得分:33)

你可以试试这个:

var query=data.Skip(1).Take(1);

答案 1 :(得分:5)

如果元素不存在,则Take()返回null(因此等同于FirstOrDefault())。

如果您更倾向于抛出异常(因为第二个元素不在那里),比如First(),那么使用:

Skip(1).Single()

答案 2 :(得分:3)

如果您使用

.Take(2)

你会得到第一个和第二个。

编辑 - 如果你需要第一个和第二个,那么上面的效率比运行你的查询两次更有效:

.Take(1)
.Skip(1).Take(1)

答案 3 :(得分:3)

尝试这个可能有用的简单实现

var query= (from p in db.Person where p.Person == person_id select p);
var firstResult = query.First();
var secondResult = query.Skip(1).Take(1).Single();
var thirdResult = query.Skip(2).Take(1).Single();

答案 4 :(得分:1)

选择前2,然后选择第二个元素。

答案 5 :(得分:1)

Collection.ElementAt(1)

将获取集合中的第二条记录。

答案 6 :(得分:0)

使用.Skip(1)方法

答案 7 :(得分:0)

正如约翰·安德森(John Anderson)指出的那样,Skip(1).Take(1)返回大小为1的IEnumerable

为了获取第二个条目本身或null(即无例外),我在使用以下内容:

var secondEntry = collection?.Skip(1)?.FirstOrDefault();

它可能不适用于您的特定情况,但可能对其他情况有用。