为什么我的LINQ语句中不能包含多个包含级别?

时间:2013-07-27 16:17:52

标签: c# linq entity-framework

我正在使用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 { 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; }
}

现在我正在尝试编写一个LINQ查询来填充这个类:

public class TopicSubTopicSelect
{
    public int TopicId { get; set; }
    public int SubTopicId { get; set; }
    public string TopicName { get; set; }
    public string SubTopicName { 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();

但它给我一个错误,我把它放在&lt;&lt;&lt;&lt;&lt;&lt;

我想要的是.Include(s =&gt; s.Topics.SubTopics)

然而intellisense并没有给我这个选项。我有什么想法 做错了我怎么能修改LINQ以获取数据来填充TopicSubTopicSelect类

2 个答案:

答案 0 :(得分:2)

.Include(s => s.Topics.Select(t => t.SubTopics))

.Select()中使用.Include()获取所需的加入。

制作一个简单的项目进行测试,我收到了以下内容:

screenshot

答案 1 :(得分:2)

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

.Include(s => s.Topics.SelectMany(t => t.SubTopics))

如果.SelectSubTopic,请使用property,如果是list,请使用.SelectMany

有关更多说明,请参阅Select Vs SelectMany