c# - 为什么我不能在 LINQ 语句中执行多于一层的包含?

标签 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();

但是它在我放置 <<<<<

的行上给了我一个错误

我想要的是 .Include(s => s.Topics.SubTopics)

但是智能感知并没有给我这个选项。有什么想法我是什么 做错了以及如何修改 LINQ 以获取数据来填充 TopicSubTopicSelect 类

最佳答案

这会给你想要的结果 -

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

如果SubTopic属性,则使用.Select,但如果是列表,则使用。选择多个

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

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

相关文章:

c# - 端口转发时的 HttpListenerRequest.Url

c# - 用 LINQ 替换嵌套的 foreach;修改和更新内部深处的属性

c# - Bin - 在 WPF 中部署基于 MySQL Entity Framework Provider 的应用程序?

c# - 如何使用 ExecuteSqlCommand 删除 Entity Framework 中的记录?

c# - 如何连接两个表,其中条件 'Where' 与与第一个表关联的第三个表相关

c# - Lucene.Net 布隆过滤器上的按位查询

c# - 随着时间的推移,DispatcherTimer 会占用 CPU,导致 WPF 视觉对象无法正确呈现

c# - 如何在 MVVM 中更改属性时更新 UI 更改

c# - 从列表 2 中过滤列表 1

c# - 在c#中分层显示父子元素