2016-03-22 5 views
-1

So habe ich zwei Repositories: Repository A die Informationen von Datenbank erhält A und Repository B die Informationen von Datenbank B nimmt.Möglichkeiten zur Begrenzung von Datenbankaufrufen? Insbesondere in ASP.NET MVC

In Repository A, bekomme ich eine Liste von, sagen wir 5000, Ergebnisse. Jetzt möchte ich Informationen von jedem dieser Ergebnisse mit Repository B auf einem bestimmten Wert von Repository A erhalten, wenn dieser Wert nicht leer oder null ist.

Moment habe ich eine foreach Schleife in Repos A und rufen Repos B ‚s Verfahren auf jeden. Ich weiß, dass es einen günstigeren Weg dafür geben muss. Irgendwelche Vorschläge?

+1

Haben Sie sich Gedanken zu setzen Ihre Daten in der gleichen Datenbank? –

+0

@JoePhillllips Leider habe ich keinen Zugang dazu. Außerdem sind die Daten sehr unterschiedlich, daher wäre es ein wenig verwirrend, alle Daten in der gleichen Datenbank zu haben. – Daath

+0

Haben Sie darüber nachgedacht, eine dynamische LINQ where-Anweisung zu erstellen? – Maxime

Antwort

2

Angenommen, dies ist Entity Framework, können Sie WHERE X IN (...) verwenden, indem Sie eine Contains in LINQ tun. So würden Sie Ihre Sachen tun alle 5000 Datensätze aus Repository A abzurufen, zusammen eine Liste von IDs, dann eine einzelne LINQ-Abfrage für Repository B bauen - dies könnte Ihre Bedürfnisse anzupassen:

int[] fooIDs; 
using (var contextA = new ContextA()) { 
    fooIDs = contextA.Foos.Select(f => f.Id).ToArray(); 
} 

using (var contextB = new ContextB()) { 
    var people = contextB.People 
     .Where(p => fooIDs.Contains(p.FooID)); 
} 
Verwandte Themen