0

以下がデータモデルであると想像してみましょう。Toys にクエリを実行したいのですが、次の疑似コードを実行できるように結果が返されます。

foreach (var parent in parents)
            {
                Console.WriteLine(parent.Name);

                foreach (var child in parent.Children)
                {
                    Console.WriteLine(child.Name);

                    foreach (var toy in child.Toys)
                    {
                        Console.WriteLine(toy.Name);
                    }
                }
            }

データモデル:

public class Parent
{
    public Guid ParentId { get; set; }
    public String Name { get; set; }
    public ICollection<Child> Children { get; set; } 
}
public class Child
{
    public Guid ChildId { get; set; }
    public Guid ParentId { get; set; }
    public Parent Parent { get; set; }
    public String Name { get; set; }
    public ICollection<Toy> Toys { get; set; } 
}
public class Toy
{
    public Guid ToyId { get; set; }
    public Guid ChildId { get; set; }
    public Child Child { get; set; }
    public String Name { get; set; }
    public bool IsCool { get; set; }
}

グループ化を使用してこれを実行しようとしましたが、グループ化を反復しようとすると、キーにプロパティがないため、Parent.Name または Child.Name を取得できません。

前もって感謝します。

4

2 に答える 2

1

できるよ:

var query = from p in parents
            from c in p.Children
            from t in c.Toys
            select new { Parent = p.Name, Child = c.Name, Toy = t.Name }

foreach (var a in query)
{
    // write values.
}

実際には、これはSelectManyを使用します。

編集

あなたのコメントの後、あなたが探しているのはグループ化ではないと思います。Parent実際にオブジェクトを持っている場合Children、各親には独自のコレクションがあるため、そのオブジェクトは既にグループ化されています。しかし、コレクションにデータを追加する方法を探しているのではないでしょうか? それはによって行われます

var query = from p in parents.Include(x => x.Children.Select(c => c.Toys));
于 2013-02-20T09:36:23.233 に答える
0

falseにLazyLoadingEnabled設定すると、1 つの linq クエリを使用してすべての関連オブジェクトをロードすることで、これを行うことができます。

Children または Toys テーブルに大量の関連データがある場合、これによりパフォーマンスの問題が発生する可能性があることに注意してください。

context.ContextOptions.LazyLoadingEnabled = false;

var parents = context.Parents.Select(x=>x).ToList();
foreach(var parent in parents) {
    Console.WriteLine(parent.Name);

    foreach(var child in parent.Children) {
        Console.WriteLine(child.Name);

        foreach(var toy in child.Toys) {
            Console.WriteLine(toy.Name);
        }
    }
}
于 2013-02-20T01:23:13.493 に答える