我有这样的事情:
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();
是否合适,或者我可以做得更好吗?
答案 0 :(得分: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;
请注意,如果要将Take
和Skip
与LINQ to Entities一起使用,则需要按某些属性进行排序。如果有疑问,只需通过帖子Id
订购。
如果Thread
和Posts
之间的关系是一对多EF,则会自动使用15个已加载的帖子填充thread.Posts
集合。
答案 1 :(得分: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);
}
答案 2 :(得分:-1)
您正在跳过所有15条记录。使用以下
替换此
var tmp = thread.Posts.Skip(15).Take(15);
用
var tmp = thread.Posts.Skip(15).Take(30);
希望这会有所帮助。