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()andを使用する必要があります。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);
于 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 に答える