我有一个名为测试的表格:
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?
答案 0 :(得分:12)
在这种情况下:Take(8)
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
或查询数据库两次。
如果您OrderByDescending
和Skip
第一个 N 元素,则默认情况下您将获取所有剩余元素。所以你可以这样做:
var query = context.Test.OrderByDescending(t=>t.Id).Skip(2);
Docs:
绕过序列中指定数量的元素然后返回 其余的元素。
如果你真的没有打算执行或附加额外的查询逻辑,那么在最后调用.ToList()
(实际上对数据库执行查询)是合乎逻辑的。