【发布时间】:2021-05-24 11:17:32
【问题描述】:
以下查询获取一个类别的所有论坛帖子。而且我还需要显示每个帖子的最新评论时间。但由于它,查询似乎需要更多时间。 (这是有道理的)。
但我无法弄清楚如何优化它,而且我不确定在哪里可以找到这方面的信息。 对于我的问题的任何提示或解决方案将不胜感激。
查询以获取该类别的初始帖子
var query = context.ctm_Forum_Post.Where(x => x.Deleted == false && x.FK_Categori_ID == Id)
.Select(x => new ForumPostModel()
{
Id = x.Id,
Title = x.Title,
BodyText = x.BodyText,
Summary = x.Summary,
Archieved = x.Archieved,
Created = x.Created,
Deleted = x.Deleted,
MemberID = x.FK_Member_ID,
Sticky = x.Sticky,
Updated = x.Updated,
CategoryId = x.FK_Categori_ID
}).ToList();
foreach (var item in query)
{
item.LatestCommentTime = this.GetNewestCommentDateByPost(item.Id);
}
return query.OrderByDescending(x=> x.Created);
对于每一篇文章,我都必须再调用一次数据库。
var query = (from comments in context.ctm_Comments
join posts in context.ctm_Forum_Post on comments.Page_ID equals posts.Id
where posts.Id == id && comments.Deleted == false
orderby comments.Reqistration_timestamp descending
select comments.Reqistration_timestamp).FirstOrDefault();
评论表
public partial class ctm_Comments
{
public int ID { get; set; }
public int Page_ID { get; set; }
public int Member_ID { get; set; }
public string Comment { get; set; }
public Nullable<System.DateTime> Reqistration_timestamp { get; set; }
public bool Deleted { get; set; }
public Nullable<System.Guid> Page_Guid { get; set; }
}
发布表格
public partial class ctm_Forum_Post
{
public int Id { get; set; }
public string Title { get; set; }
public string BodyText { get; set; }
public string Summary { get; set; }
public int FK_Categori_ID { get; set; }
public bool Archieved { get; set; }
public bool Deleted { get; set; }
public bool Sticky { get; set; }
public int FK_Member_ID { get; set; }
public System.DateTime Created { get; set; }
public System.DateTime Updated { get; set; }
public virtual ctm_Forum_Category ctm_Forum_Category { get; set; }
}
【问题讨论】:
-
minimal reproducible example 总是很好。想象一下,如果我有一个
Forum_Post、Post、Comment类,只有 key 和 fk、使用的属性(例如,deleted、timestamp)和一个用于识别它们的虚假属性。我们还可以使用 1 个帖子、2 个 cmets 进行简单的列表初始化。 -
这里我想我不会尝试让LinQ2Sql编写查询。我会为懒人做一个简单的程序或视图。但是要 100% 使用 sql 以避免在翻译过程中出现任何问题。
-
我添加了两个表@DragandDrop
-
对于 linq 分组连接:docs.microsoft.com/en-us/dotnet/csharp/linq/…
标签: c# sql sql-server optimization