Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在LINQtoSQL中获取第二条记录_Linq_Linq To Sql - Fatal编程技术网

如何在LINQtoSQL中获取第二条记录

如何在LINQtoSQL中获取第二条记录,linq,linq-to-sql,Linq,Linq To Sql,我有一张汇率表。我需要得到当前利率和以前的利率,然后比较结果 我可以使用FirstOrDefault获取第一条记录 当我使用ElementAtOrDefault时,此错误显示“不支持查询运算符'ElementAtOrDefault'。如何获取第二条记录?如果使用 .Take(2) 你会得到第一个和第二个 编辑-如果您同时需要第一个和第二个,则上述操作将比两次运行查询更高效: .Take(1) .Skip(1).Take(1) 您可以尝试以下方法: var query=data.Skip(1)

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

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

当我使用
ElementAtOrDefault
时,此错误显示“不支持查询运算符'ElementAtOrDefault'。如何获取第二条记录?

如果使用

.Take(2)
你会得到第一个和第二个

编辑-如果您同时需要第一个和第二个,则上述操作将比两次运行查询更高效:

.Take(1)
.Skip(1).Take(1)
您可以尝试以下方法:

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

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

Use.Skip(1)方法

Take()在元素不存在时返回null(因此相当于FirstOrDefault()

如果您希望像First()一样引发异常(因为第二个元素不存在),请使用:

Skip(1).Single()

这里没有明确提到一个细节:
FirstOrDefault
返回一个
元素
跳过(1);i、 e.
Skip(1).Take(1)
返回的类型是
IEnumerable
,而
FirstOrDefault
返回的类型不是。

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

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();

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

正如John Anderson已经指出的
跳过(1)。Take(1)
返回大小为1的
IEnumerable

为了获取第二个条目本身或另一个
null
(即无例外),我使用以下方法:

var secondEntry = collection?.Skip(1)?.FirstOrDefault();
它在您的特定情况下可能不起作用,但在其他情况下可能有用。

或跳过(1)。使用(1)只获得第二个。无耻插头:使用。。。如果您希望使用Second()、SecondOrDefault()、Third()。。。等等。风格方法。我在单元测试中经常使用它们:-)。这些方法还提供了与First()/FirstOrDefault()相同的非常一致的异常。该项目也是在GH和麻省理工学院许可证。
var secondEntry = collection?.Skip(1)?.FirstOrDefault();