Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 我是否可以合理地使用.Include-in-LINQ和SQL Server 2012后端深入五个级别?_Sql Server_Linq_Entity Framework_Entity Framework 4.1 - Fatal编程技术网

Sql server 我是否可以合理地使用.Include-in-LINQ和SQL Server 2012后端深入五个级别?

Sql server 我是否可以合理地使用.Include-in-LINQ和SQL Server 2012后端深入五个级别?,sql-server,linq,entity-framework,entity-framework-4.1,Sql Server,Linq,Entity Framework,Entity Framework 4.1,我正在使用EntityFramework5和SQLServer2012数据库以及以下类结构。该结构有五个层次: 主题>主题>副标题>事实>答案 我需要的是当主语给我时,能够得到一个事实对象的列表以及它们的答案。这里我关心的是性能以及使用LINQ查询的深度 以下是课程: public partial class Subject { public Subject() { this.Topics = new List<Topic>(); } public int Subje

我正在使用EntityFramework5和SQLServer2012数据库以及以下类结构。该结构有五个层次:

主题>主题>副标题>事实>答案

我需要的是当主语给我时,能够得到一个事实对象的列表以及它们的答案。这里我关心的是性能以及使用LINQ查询的深度

以下是课程:

public partial class Subject {
    public Subject() { this.Topics = new List<Topic>(); }
    public int SubjectId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Topic> Topics { get; set; }
}
public partial class Topic {
    public Topic() { this.SubTopics = new List<SubTopic>(); }
    public int TopicId { get; set; }
    public string Name { get; set; }
    public int SubjectId { get; set; }
    public virtual Subject Subject { get; set; }
    public virtual ICollection<SubTopic> SubTopics { get; set; }
}
public partial class SubTopic {    
    public SubTopic() { this.Facts = new List<Fact>(); }
    public int SubTopicId { get; set; }
    public string Name { get; set; }
    public int TopicId { get; set; }
    public virtual Topic Topic { get; set; }
    public virtual ICollection<Fact> Facts { get; set; }     
}
public class Fact {
    public Fact() { this.Answers = new List<Answer>(); }      
    public int FactId { get; set; }
    public int FactStatusId { get; set; }
    public string Title { get; set; }
    public int SubTopicId { get; set; }
    public virtual SubTopic SubTopic { get; set; }
    public virtual ICollection<Answer> Answers { get; set; }
}
现在我有一个新的要求,我不知道如何获得我需要的数据。我需要的是得到一份事实清单和属于某一特定主体的答案

我将感谢一些建议,并希望为这方面提供一些示例代码。我是否应该执行以下操作:

        var facts = _subjectsRepository.GetAll()
            .Where(a => a.SubjectId == subjectId)
然后做一些长的,包括主题,副标题,事实和最终答案的列表?请注意,数据由管理员使用,因此尽管我需要快速返回数据,但不需要非常快地返回给我


请注意,在不久的将来,我们希望开始使用EF6和SQL Server 2014预览版。我很想知道是否有人知道这些可能带来的功能,这些功能有助于我们在这种情况下获取数据。

如果您只想要
事实
实体和
答案
实体,那么返回
主题
子主题
实体也没有意义。而不是获取
主题
实体并使用include深入5个级别。像下面这样的东西也许可以

var query = context.Facts
                   .Where(f => f.Subtopic.Topic.SubjectId == mySubjectId)
                   .Include(f => f.Answers);

你可以,而且会很快。试一试,测量一下,如果你的速度慢,那么试着把它分成两个或两个以上的查询。你能告诉我我需要如何编码。包括。如果你能把这句话写成一个答案,我可以接受并尝试一下。我只是不知道该怎么做。我是不是要一个接一个地拴起来?
var query = context.Facts
                   .Where(f => f.Subtopic.Topic.SubjectId == mySubjectId)
                   .Include(f => f.Answers);