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))

.Selectが の場合は使用しますSubTopicが、propertyが の場合はlistを使用します.SelectMany

詳細については、Select Vs SelectManyを参照してください。

于 2013-07-27T16:21:51.377 に答える