2

我正在使用 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 类

4

2 回答 2

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

.Select()在 中使用.Include()以获得所需的连接。

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

截屏

于 2013-07-27T16:20:05.497 回答
2

这会给你想要的结果 -

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

使用.SelectifSubTopic是 aproperty但如果是 a list,则使用.SelectMany

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

于 2013-07-27T16:21:51.377 回答