我的存储库中有以下代码:
public PagedResult<Post> GetAllPublishedByTag(int tagId, int start, int max)
{
var query = Database.Set<Post>().Where(p => p.IsPublished)
.OrderByDescending(p => p.CreatedAt)
.Skip(start)
.Take(max);
int total = query.Count();
var result = query.ToList();
return new PagedResult<Post>(result, total);
}
这将给我所有发表的帖子。但我想要的是为某个标签选择所有已发布的帖子。我的模型设置方式使得标签与帖子有多对多的关系。我尝试稍微修改上面的代码,但这不起作用:
public PagedResult<Post> GetAllPublishedByTag(Tag tag, int start, int max)
{
var query = Database.Set<Post>().Where(p => p.Tags.Contains(tag) && p.IsPublished)
.OrderByDescending(p => p.CreatedAt)
.Skip(start)
.Take(max);
int total = query.Count();
var result = query.ToList();
return new PagedResult<Post>(result, total);
}
我更倾向于传入tagId(根据第一个代码示例)而不是标记对象,但不确定如何正确编写LINQ语句。
答案 0 :(得分:1)
var query = Database.Set<Post>().Where(p => p.Tags.Any(t => t.Id == tagId) && p.IsPublished)
.OrderByDescending(p => p.CreatedAt)
.Skip(start)
.Take(max);
旁注:我相信您的分页可能有问题,因为调用skip / take后计算变量total。