2016-04-06 3 views
0

Ich habe eine Abfrage, die wie folgt aussieht:Concat-Rückgabe Die verschachtelte Abfrage wird nicht unterstützt. Operation1 = 'UnionAll' Operation2 = 'MultiStreamNest'

ProviderNotes.Where(it=>it.NoteEntityId == 272651).Select(it=>new 
{ 
    Id = it.NoteId, 
    Tags = it.ProviderNoteTags.Select(t => t.RelatedEntityId) 
}).Concat(BookingNotes.Where(it=>it.NoteEntityId == 272651).Select(it=>new 
{ 
    Id = it.NoteId, 
    Tags = it.BookingNoteTags.Select(t => t.RelatedEntityId) 
} 
)) 

und wenn ich versuche Ergebnisse davon zu bekommen, ich bin immer

Die verschachtelte Abfrage wird nicht unterstützt. Operation1 = ‚UnionAll‘ Operation2 = ‚MultiStreamNest‘

Es gibt zwei Einschränkungen auf dieser Abfrage: 1) Ich kann nicht jede Abfrage als IEnumerable erhalten, bevor die Kombination, dass, weil ich es in IQueryable Form zum weiteren benötigen Filterung 2) Ich kann innere Sammlung nicht durch separate Abfrage füllen, weil jede Abfrage, die verkettet wird, in verschiedenen Repo mit verschiedenen Tabellen gebildet wird

PS Das von mir bereitgestellte Beispiel habe ich in LinqPad getestet. Es ist wirklich vereinfacht, um die Idee von dem, was passiert, zu bieten.

Antwort

0

weil jede Abfrage, die verkettet wird, wird mit verschiedenen Tabellen

in verschiedenen Repo gebildet wird, wenn die Tabellen in einem anderen Repository sind, wie auf der Erde erwarten Sie LINQ der Lage sein, zu drehen es in einer einzigen Abfrage?

Der einzige Ort, den die beiden Repositories erfüllen, ist in Ihrem LINQ-Code. Daher muss Ihr LINQ-Code die Zwischenergebnisse realisieren. Es gibt keine Alternative.

+0

Ich habe wahrscheinlich nicht richtig erklären. Diese Tabellen befinden sich im selben Kontext. Sowohl die Eltern- als auch die Kindtabelle haben die gleiche Struktur, der einzige Unterschied besteht darin, dass es auf Datenbankebene unterschiedliche Tabellen gibt. Ich habe eine Basisklasse, die Abfrage für bestimmte Tabelle bildet, und dann habe ich Repos, die nur Konfigurationsklassen geerbt von dieser Basis sind, nur konkrete Tabellen angeben. Warum ich Zwischenergebnisse nicht verwenden kann, ist, dass ich nach der Vereinigung den Paging-Filter anwenden muss, also wähle ich keine 10k-Datensätze aus, um nur 5 auf dem Bildschirm anzuzeigen. Und übrigens, ohne innere Abfrage für Tags funktioniert alles ok. – KorsaR

Verwandte Themen