2

私はこのようなものを持っています:

var thread = _forumsDb.Threads
                .Include("Posts")
                .Single(t => t.Id == threadId);

今、単一のスレッドとその中に投稿のコレクションがある場合、それらの投稿を数えてから、それらの一部を取り、残りを削除したいと思います。

var count = thread.Posts.Count();
var tmp = thread.Posts.Skip(15).Take(15);
thread.Posts.Clear();
thread.Posts = tmp;

しかし、それは明らかにうまくいきません。では、どうすればコレクションにコレクションを追加できますか? ここで適切ですthread.Posts.Clear();か、それとももっとうまくできますか?

4

3 に答える 3

1

必要なデータベースから 15 件の投稿のみを読み込み、単一のデータベース クエリのみを実行するには、射影を使用します。

var data = _forumsDb.Threads
    .Where(t => t.Id == threadId)
    .Select(t => new
    {
        Thread = t,
        Count = t.Posts.Count(),
        Posts = t.Posts.OrderBy(p => p.SomeProperty).Take(15)
    })
    .Single();

var count = data.Count;
var thread = data.Thread;

LINQ to EntitiesTakeを使用する場合は、いくつかのプロパティで注文する必要があることに注意してください。Skip疑わしい場合は、郵便局で注文してIdください。

Threadとの関係Postsが 1 対多の場合、EF はthread.Posts15 個の読み込まれた投稿をコレクションに自動的に入力します。

于 2012-09-11T17:21:30.223 に答える
0

これは私がそれをする方法です:

var count = thread.Posts.Count();
using (var tmp = thread.Posts.Skip(15).Take(15))
{
  thread.Posts.Clear();
  foreach (var Item in tmp) 
    thread.Posts.Add(Item);
}
于 2012-09-11T17:02:34.573 に答える
-1

取得している15のレコードすべてをスキップしています。以下を使用してください

これを交換してください

var tmp = thread.Posts.Skip(15).Take(15);

var tmp = thread.Posts.Skip(15).Take(30);

これがお役に立てば幸いです。

于 2012-09-11T17:06:26.800 に答える