如何跳过最近2条记录并获取linq的所有其他记录?

时间:2016-08-29 05:15:39

标签: c# entity-framework linq

我有一个名为测试的表格:

Test: Id, CreatedBy, CreatedDate

现在我想获得测试列表,但skip last 2 test。所以如果我说的是10 test然后我希望 1 - 8测试并跳过测试9和10

这就是我试图这样做的方式:

var query = context.Test.OrderByDescending(t=>t.Id).Skip(2) // How to take other records?

3 个答案:

答案 0 :(得分:12)

在这种情况下:Take(8)

使用TakeSkip,您可以获得所需的任何范围。

E.G:

var query = context.Test.OrderByDescending(t=>t.Id);
var allButTheLastTwoElements = query.Take(query.Count() - 2);

最安全的方式:

var query = context.Test.OrderByDescending(t=>t.Id).ToList();
var allButTheLastTwoElements = query.Take(Math.Max(0,query.Count() - 2));

或者你可以反过来做(取决于你的要求)

var query = context.Test.OrderByAscending(t=>t.Id).Skip(2);

答案 1 :(得分:4)

如果记录大小未修复,您可以使用:

test.Take(test.Count-2);
//If records are already sorted in the order you like,

test.Where(t=>t.ID <= test.Max(m=>m.ID)-2);
//Where ID is a unique key and the list may not be sorted by id
//This will return the lowest 8 ID even if the list is sorted by address or whatever.

答案 2 :(得分:1)

您需要的是非常简单的,您甚至不需要使用Take或查询数据库两次。

如果您OrderByDescendingSkip第一个 N 元素,则默认情况下您将获取所有剩余元素。所以你可以这样做:

var query = context.Test.OrderByDescending(t=>t.Id).Skip(2);

Docs

  

绕过序列中指定数量的元素然后返回   其余的元素。

如果你真的没有打算执行或附加额外的查询逻辑,那么在最后调用.ToList()(实际上对数据库执行查询)是合乎逻辑的。