-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.SelectMany(t => t.SubTopics))
            .AsEnumerable()
            .Select(item => new TopicSubTopicSelect(item.TopicId <<<
                                                    item.SubTopicId <<
                                                    item.Topic.Name <<
                                                    item.Name <<))
            .ToList();

有人可以告诉我如何从我用 << 标记的字段中获取数据。我试图做 .item.Topic.TopicId 等,但这似乎不起作用。

4

2 回答 2

0

正如我在对 ataravati 答案的评论中提到的那样,你实际上不应该有 aSubTopicRepository所以你在开始时是正确的,SubjectsRepository但是你通过 Subject ID 查询所以你不应该通过GetAll(),你应该有一个Get(int id)方法。Get由于子主题(子主题)是主题的一部分,因此应将包含作为内部实现细节处理。这使得方法调用看起来像这样:

return _subjectsRepository
        .Get(subjectId)
        .SelectMany(subject => subject.SubTopics))
        .Select(subTopic => new TopicSubTopicSelect
        {
            TopicId = subTopic.TopicId,
            SubTopicId = subTopic.SubTopicId,
            TopicName = subTopic.Topic.Name,
            SubTopicName = subTopic.Name
        }).ToList();
于 2013-07-28T09:33:17.677 回答
0

你不应该从主题开始。您只需从 SubTopic Repository 开始,甚至不需要使用.Include. 像这样做:

_subTopicRepository
    .GetAll()
    .Where(s => s.Topic.SubjectId == subjectId)
    .Select(s => new TopicSubTopicSelect()
       {
          TopicId = s.TopidId,
          SubTopicId = s.SubTopicId,
          TopicName = s.Topic.Name,
          SubTopicName = s.Name
       })
    .ToList();
于 2013-07-27T16:49:29.707 回答