2

私はこのようなオブジェクトを持っています:

Tree {
    String Name;
    Int ID;
    List<SubObjects> SubObjects
}

SubObjects {
    int Level;
    string Name;
}

次の形式で情報が届きList<Output>ますOutput

Output {
    String TreeName;
    Int TreeID;
    Int SubObjectLevel;
    String SubObjectName;
}

基本的に、ツリーは次の形式で表されます

Tree1 TreeID1 Level1 SubObject1

Tree1 TreeID1 Level2 SubObject2

Tree1 TreeID1 Level3 SubObject3

Tree1 TreeID1 Level1 SubObject4

Treeにデータを入力するためのLINQクエリを作成したいのですが、GroupByでスタックしています。これは非常に基本的な質問ですが、私はLINQを学習中です。どんな助けでも大歓迎です。

ありがとう!

編集:

これがこれまでの私のコードです

var trees =
    from o in output
    select new Tree {
        Name = o.TreeName,
        ID   = o.TreeID,
        SubObjects = //somehow group them
    }

私も試しました

var trees =
    from o in output
    group o in o.TreeID into levels
    select new Tree {
        Name = //at this point o.TreeName is not available
    }
4

1 に答える 1

5

したがってGroupBy、フラットリストを取得し、定義されたキーに基づいて小さいセットを生成しIGroupingます。この場合、キーを「ツリー」にする必要があります。これは、共通の要素であるためです。

var sourceOutputs = <...get outputs list...>;

var query =
     // for each <Output> thingy...
     from outputThing in sourceOutputs

ここでは多くのオプションがあるので、ここで一時停止します-ツリーID、ツリー名などでグループ化できます-との両方IDでグループ化しますName

var query =
     // for each <Output> thingy...
     from outputThing in sourceOutputs
     // group them by Tree ID + Tree name
     group outputThing by 
         new { ID = outputThing.TreeID, Name = outputThing.TreeName } 
     into byTree
     // So now we can transform these groups of <Output> into a tree
     select new Tree
     {
         ID = byTree.Key.ID,
         Name = byTree.Key.Name,
         // And now the sub objects:
         // what 'byTree' actually is => a key (ID + name), 
         // and an enumerable of <Output> objects that match that key
         SubObjects = 
           (
               from matchedThingy in byTree
               select new SubObject() 
               { 
                   Level = matchedThingy.SubObjectLevel,
                   Name = matchedThingy.SubObjectName
                }
           ).ToList()
     };
于 2013-02-28T00:39:47.830 に答える