修改 LINQ 以获取前 5 个元素
本文关键字:元素 获取 LINQ 修改 | 更新日期: 2023-09-27 18:31:05
var lastArticles = from a in be.MyTable
where a.id == 1
join c in be.OtherTable on a.parent equals c.id
orderby a.timestamp descending
select new { a, cName = c.name};
我需要获取前 5 个元素。
我正在做
.Take(5)
但是有没有办法在 LINQ 语句中执行?
不,您需要使用 Skip()
和 Take()
作为方法调用。没有特定于 LINQ 的等效项。
var lastArticles = (from a in be.MyTable
where a.id == 1
join c in be.OtherTable on a.parent equals c.id
orderby a.timestamp descending
select new { a, cName = c.name }).Take(5);
linq 查询应始终与运行该查询的产品分开。
.Take()
生成结果,因此应与查询分开且不同。
//data query
var lastArticlesQuery = from a in be.MyTable
where a.id == 1
join c in be.OtherTable on a.parent equals c.id
orderby a.timestamp descending
select new { a, cName = c.name};
//results of that query at this time
var lastArticles = lastArticlesQuery.Take(5);
这段代码只是合成糖,通常它将被转换为一个 LINQ 方法链,如下所示:
var lastArticles = be.MyTable
.Where(a => a.id == 1)
.Join(be.OtherTable, a => a.parent, c => c.id,
(a, c) => new { a, c})
.OrderByDescending(@t => @t.a.timestamp)
.Select(@t => new { @t.a, cName = @t.c.name });
因此,拥有Take()
关键字只会增加系统糖,并且也需要重新转换。
简而言之,不,唯一的方法是使用Take()
方法。