0

在特定情况下,我正在编写此方法以按类别 Id 返回帖子:

public Post GetPostByCategory(Guid categoryId)
        {
            var query= _siteContext.Posts.Where(p => p.Category.Id == categoryId)
                                    .OrderByDescending(p => p.CreationDate);
            return query;//Error 
        } 

我只想返回查询,查询必须是 Post 类型,我该怎么办??

我不想像这样返回帖子列表

 public IList<Post> GetPostByCategory(Guid categoryId)
            {
                var query= _siteContext.Posts.Where(p => p.Category.Id == categoryId)
                                        .OrderByDescending(p => p.CreationDate);
                return query.tolist(); 
            }

我以前通过 Nhibernate 做过这样的事情:

  public int TotalPostsForCategory(string categorySlug)
        {
          return _session.Query<Post>()
                        .Where(p => p.Published && p.Category.UrlSlug.Equals(categorySlug))
                        .Count();
        }

我怎么能用实体框架做到这一点???

4

2 回答 2

2

您必须使用FirstOrDefault()扩展方法仅返回第一个元素:

public Post GetPostByCategory(Guid categoryId)
{
    var firstPost = _siteContext.Posts
                                .Where(p => p.Category.Id == categoryId)
                                .OrderByDescending(p => p.CreationDate)
                                .FirstOrDefault();
    return firstPost;
} 

FirstOrDefault 将被 SQL 查询中的 TOP 1 替换。
查询应如下所示:

SELECT TOP 1 p.*
FROM Posts p
WHERE p.CategoryId = categoryId
ORDER BY p.CreationDate DESC
于 2013-04-30T12:01:32.857 回答
2

您可以使用FirstSingle像这样:

public Post GetPostByCategory(Guid categoryId)
{
  var query= _siteContext.Posts.Where(p => p.Category.Id == categoryId)
                         .OrderByDescending(p => p.CreationDate);
  return query.First();
}

或者

public Post GetPostByCategory(Guid categoryId)
{
  var query= _siteContext.Posts.Where(p => p.Category.Id == categoryId)
                         .OrderByDescending(p => p.CreationDate);
  return query.Single();
}

请参阅http://msdn.microsoft.com/en-us/library/bb348657.aspxhttp://msdn.microsoft.com/en-us/library/bb156472.aspx

于 2013-04-30T12:01:44.353 回答