2013-07-27 35 views
2

我使用实体框架5,我有这些类:为什么我不能在LINQ声明中使用多个包含级别?

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)

但IntelliSense不给我这个作为一个选项。我什么任何想法 做错了,我怎么能修改LINQ来获取数据,填补了TopicSubTopicSelect类

+2

当问到关于linq的问题时,不要忘记包含关于您使用的提供程序的信息。 Linq-to-Objects,实体框架,Linq-to-SQL等等都非常不同。 – CodesInChaos

+0

对不起,这是实体框架 – Melina

回答

3

这会给你想要的结果 -

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

使用.Select如果SubTopicproperty,但如果是一个list,使用.SelectMany。请参阅Select Vs SelectMany

+0

谢谢。这很好。所以我可以确认我只需要一个。包括线?另外.Select会是什么样子?我尝试了“.Select(item => new TopicSubTopicSelect(item.Topics。”但由于我无法获得TopicID而出现问题? – Melina

+0

我将就上述问题开放另一个问题。接受您的答案。谢谢 – Melina

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

使用.Select().Include()内获得所需的加入。

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

screenshot

+0

Select和SelectMany有什么区别? – Melina

+0

布拉德 - 你能证实罗希特说的话吗?那么我应该使用SelectMany?也是一个。包括所需的行,以及如何获取较低级别的字段来填充我的视图? – Melina

+0

@Melina:我相信'.Select'就是你想要的。 http://s21.postimg.org/73gbwoa07/Untitled.png –

相关问题