2017-08-07 1 views
2

Ich habe eine verschachtelte Dokumentstruktur wie:kann nicht Select verwenden geordnete Eigenschaft in DocumentDb LINQ-Abfrage zu holen

[ 
    { 
    "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" 
     } 
    ] 
    } 
] 

Ich bin in der Lage die folgende Abfrage in SQL-Syntax zu schreiben:

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

Diese wird mir das folgende Ergebnis:

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

ich eine ähnliche Abfrage in LINQ mit Select Klausel geschrieben wie folgt s, aber es wird ein Fehler ausgegeben, der besagt, dass SelectMany nur zwei Argumente haben darf.

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

Ihre Abfrage sieht mir ganz OK. Ist es der O-R-Mapper, der diese "SelectMany" -Überladung nicht versteht? Genaue Fehlermeldung? Im Falle von ja könnte die Antwort von dasblinkenlight es lösen. – tinudu

Antwort

1

Sie benötigen die zweite Lambda innerhalb des ersten Lambda mit einer verschachtelten Select, wie diese "Push":

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