【问题标题】:LINQ query using TPH inheritance - get derived class ICollection count使用 TPH 继承的 LINQ 查询 - 获取派生类 ICollection 计数
【发布时间】:2013-01-11 06:23:30
【问题描述】:

我试图弄清楚如何获取特定 ProjectDoc.OfType 上的 ProjectSummaryVotes 计数。查询有效,但 ProjectSummaryVote 属性为空,这意味着我收到空值错误。这是可行的吗?如果我需要这样做,我应该放弃 TPH 继承吗?

型号:

public class Project
{
    public int ProjectID { get; set; }
    public virtual ICollection<ProjectDoc> ProjectDoc { get; set; }

}
public abstract class ProjectDoc
{
    public int ProjectDocID { get; set; }
    public int ProjectID { get; set; }
    public string DocTitle { get; set; }
    public string Status { get; set; }
    public DateTime DateCreated { get; set; }

    public virtual Project Project { get; set; } 
    public virtual ICollection<Comment> Comment { get; set; }
}

public class Summary : ProjectDoc
{
    [DataType(DataType.MultilineText)]
    public string Text { get; set; }
    public ICollection<ProjectSummaryVote> ProjectSummaryVote { get; set; }
}
public class ProjectSummaryVote
{
    public int ProjectSummaryVoteID { get; set; }
    public int ProjectDocID { get; set; }
    public bool Vote { get; set; }
    public virtual Summary Summary { get; set; }
    public virtual User User { get; set; }
}

查询:

 Project project = db.Projects
          .Include(i => i.User)
          .Include(i => i.ProjectDoc)
          .SingleOrDefault(x => x.ProjectID == id);

尝试获取引发错误的计数。

 var trueCount = Model.ProjectDoc.OfType<Literrater.Models.Summary>()
      .Where(s => s.Status == "Active")
      .SelectMany(v => v.ProjectSummaryVote.Where(s => s.Vote == true))
      .Count();

【问题讨论】:

  • 您愿意分享错误吗?
  • 错误只是“值不能为空”。它没有连接 ProjectSummaryVote 记录。摘要共有三票。不知道如何解决。
  • Literrater.Models.Summary 是什么样的?
  • 错误可能是 v.ProjectSummaryVote 为空!
  • 如果你将集合ProjectSummaryVote设为虚拟以启用延迟加载呢?

标签: c# .net entity-framework linq-to-entities


【解决方案1】:

我对数据进行了重新建模,以便所有投票现在都成为单个投票模型的一部分。这让我可以将投票关系从派生模型移到主模型中,这样就可以轻松访问数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多