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
C# 为什么我不能在LINQ语句中执行多个级别的include?_C#_Linq_Entity Framework - Fatal编程技术网

C# 为什么我不能在LINQ语句中执行多个级别的include?

C# 为什么我不能在LINQ语句中执行多个级别的include?,c#,linq,entity-framework,C#,Linq,Entity Framework,我使用的是实体框架5,我有以下几个类: public partial class Subject { public int SubjectId { get; set; } public string Name { get; set; } public virtual ICollection<Topic> Topics { get; set; } } public partial class Topic { public int TopicId { g

我使用的是实体框架5,我有以下几个类:

public partial class Subject
{
    public int SubjectId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Topic> Topics { get; set; }
}

public partial class Topic
{
    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 int SubTopicId { get; set; }
    public string Name { get; set; }
    public int TopicId { get; set; }
    public virtual Topic Topic { get; set; }
}
到目前为止,我有:

        return _subjectsRepository
            .GetAll()
            .Where(s => s.SubjectId == subjectId)
            .Include(s => s.Topics)
            .Include(s => s.Topics.) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
            .AsEnumerable()
            .Select(item => new TopicSubTopicSelect(item.TopicId,
                                                    item.SubTopicId,
                                                    item.Topic.Name,
                                                    item.Name))
            .ToList();
但是它给了我一个错误,我把 在.Include中使用.Select以获得所需的联接

在制作一个简单的项目进行测试时,我收到了以下信息:

在.Include中使用.Select以获得所需的联接

在制作一个简单的项目进行测试时,我收到了以下信息:


这会给你想要的结果-

.Include(s => s.Topics.SelectMany(t => t.SubTopics))
如果SubTopic是属性,但如果是列表,请使用.SelectMany


有关更多说明,请参阅。

这将为您提供所需的结果-

.Include(s => s.Topics.SelectMany(t => t.SubTopics))
如果SubTopic是属性,但如果是列表,请使用.SelectMany


有关更多说明,请参阅。

在询问有关linq的问题时,不要忘记包括您正在使用的提供商的信息。Linq到对象、实体框架、Linq到SQL等都有很大的不同。很抱歉,这是实体框架。在询问有关Linq的问题时,不要忘记包含有关您使用的提供程序的信息。Linq到对象、实体框架、Linq到SQL等等都有很大的不同。对不起,这是实体框架Select和SelectMany之间有什么区别?Brad-你能确认Rohit说的吗。那么我应该使用SelectMany吗?还有一个。需要包含行,我如何才能获得较低级别的字段来填充我的视图?@Melina:我相信。选择是你想要的。SelectMany和SelectMany有什么区别?Brad-你能证实Rohit说的吗。那么我应该使用SelectMany吗?还有一个。需要包含行,我如何才能获得较低级别的字段来填充我的视图?@Melina:我相信。选择是你想要的。谢谢这很有效。所以我可以确认我只需要一个。包括行吗?还有.Select看起来像什么?我试过了。Selectitem=>newtopicsubtopicselectItem.Topics。但是有一个问题,因为我无法获得主题ID?我将打开另一个关于上述问题的问题。我接受了你的回答。谢谢,谢谢。这很有效。所以我可以确认我只需要一个。包括行吗?还有.Select看起来像什么?我试过了。Selectitem=>newtopicsubtopicselectItem.Topics。但是有一个问题,因为我无法获得主题ID?我将打开另一个关于上述问题的问题。我接受了你的回答。谢谢
.Include(s => s.Topics.SelectMany(t => t.SubTopics))