2017-08-07 2 views
2

私が持っているように、ネストされた文書構造:できません

SELECT child, parent.id 
FROM parent 
JOIN child in parent.children 

この:私はSQL構文で次のクエリを記述することができる午前

[ 
    { 
    "id": "parent1", 
    "children": [ 
     { 
     "id": "child1", 
     "foo": "bar" 
     }, 
     { 
     "id": "child2", 
     "foo": "bar" 
     }, 
     { 
     "id": "child3", 
     "foo": "bar" 
     } 
    ] 
    }, 
    { 
    "id": "parent2", 
    "children": [ 
     { 
     "id": "child4", 
     "foo": "bar" 
     }, 
     { 
     "id": "child5", 
     "foo": "bar" 
     } 
    ] 
    } 
] 

[ 
    { 
    "child": { 
     "id": "child1", 
     "foo": "bar" 
    }, 
    "id": "parent1" 
    }, 
... 
] 

次のようにSelectMany節を使用して同様のクエリをLINQで作成しました。 SelectManyには2つの引数しかないことを示すエラーがスローされます。

collection.SelectMany(
    parent => parent.children, 
    (parent, child) => new { child, parent.id }); 
+0

あなたのクエリは私にはかなりOKに見えます。この「SelectMany」オーバーロードを理解していないO-Rマッパーですか?正確なエラーメッセージ?はいの場合、dasblinkenlightの答えはそれを解決する可能性があります。 – tinudu

答えて

1

あなたはこのように、ネストされたSelectとの最初のラムダ内部の「プッシュ」第二ラムダを行う必要があります。

collection.SelectMany(
    parent => parent.children.Select(child => new { 
     Child = child 
    , ParentId = parent.id 
    }) 
);