1
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 语句中做呢?

4

3 回答 3

6

不,您需要使用Skip()andTake()作为方法调用。没有特定于 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);
于 2012-04-12T12:51:36.307 回答
1

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);
于 2012-04-12T12:54:21.850 回答
1

这段代码只是语法糖,最终它会被转换成一个看起来像这样的 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 });

所以有一个关键字 forTake()只会增加语法糖,它也需要重新转换。

简而言之,不,唯一的方法是使用Take()方法。

于 2012-04-12T12:57:21.433 回答