C# 为什么我不能在LINQ语句中执行多个级别的include?
我使用的是实体框架5,我有以下几个类: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
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))