c# - ASP.Net MVC C# 检索父子子表的最后一篇文章

标签 c# asp.net-mvc linq entity-framework linq-to-sql

我有一个典型的论坛应用程序,使用嵌套表格:

论坛 => 主题 => 帖子

我正在尝试使用 LINQ 填充 ViewModel 以显示论坛中主题中帖子的最后张贴者 - 但是,当我运行查询时,出现错误:

LINQ to Entities 无法识别 'centreforum.Models.Post LastOrDefault[Post](System.Collections.Generic.IEnumerable 1[centreforum.Models.Post]) 方法,并且此方法无法转换为存储表达式

我知道它在查询中的这一行:

LastPost = f.Topics.FirstOrDefault().Posts.LastOrDefault().Author

我的 Controller 是:

    public ActionResult Index()
    {
         var forum = db.Fora.Include(x => x.Topics)
             .Select(f => new ForumViewModel
             {
                 ForumId =f.ForumId,
                 Title=f.Title,
                 Description=f.Description,
                 Topics=f.Topics.Count(),
                 Posts=f.Topics.FirstOrDefault().Posts.Count(),
                 LastPost = f.Topics.FirstOrDefault().Posts.LastOrDefault().Author 
             }
            ).ToList();

        return View(forum);
    }

我的模型是:

namespace centreforum.Models
{
public class Forum
{
    public int ForumId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public List<Topic> Topics { get; set; }
}

public class Topic
{
    public int TopicId { get; set; }
    public int ForumId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public string Author { get; set; }
    public string DateOfPost { get; set; }
    public int Views { get; set; }
    public Forum Forum { get; set; }
    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public int TopicId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public string Author { get; set; }
    public string DateOfPost { get; set; }
    public int MyProperty { get; set; }
    public Topic Topic { get; set; }
}
}

...我的 ViewModel 是:

namespace centreforum.Models
{
public class ForumViewModel
{
        public int ForumId { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public int Topics { get; set; }
        public int Posts { get; set; }
        public string LastPost { get; set; }
}
}

谁能帮我在我的查询中找到主题中的最后一篇文章?

谢谢,

标记

最佳答案

LastPost = f.Topics.FirstOrDefault().Posts.OrderBy(c => c.CreatedAt).LastOrDefault().Author

我认为,如果您按给定条件(例如创建时间)对您的帖子进行排序,它应该会按预期工作。

关于c# - ASP.Net MVC C# 检索父子子表的最后一篇文章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17169389/

相关文章:

asp.net-mvc - 带有 MVC Razor 的输入类型复选框

angularjs - 在 Angular 引导的 MVC 应用程序中有条件地呈现 MVC 包

c# - 根据另一个列表中的真实条件从通用列表中选择项目

带有包含多个条件的 WHERE 子句的 LINQ 查询

c# - 为什么要创建无窗口?

asp.net - Azure 上托管的 MVC 4 网站显示我无权查看目录或页面

c# - 如何不打开相同的 Popup WPF MVVM?

c# - LINQ 和大数据库中的选择行

c# - DateTime.Now 缺少 1 小时夏令时

c# - 在 C# Web API 中通过 HttpRoute 改变 Unity 注入(inject)