如何在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();