我正在使用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();


但这在我放置<<<<
我想要的是拥有.Include(s => s.Topics.SubTopics)

但是,智能感知并不能给我这种选择。任何想法我是什么
做错了,以及如何修改LINQ来获取数据以填充TopicSubTopicSelect类

最佳答案

这将给您想要的结果-

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


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

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

关于c# - 为什么我不能在LINQ语句中进行多个级别的包含?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17899919/

10-13 06:45