2010-12-30 9 views
1

Ist es möglich, kompilierte LINQ to SQL-Abfragen umzuformen? Angenommen, ich habe eine Abfrage mit einer gewissen Logik, und ich möchte darauf aufbauen. Ist es möglich, diese Abfrage wiederzuverwenden?Wie refigiere ich kompilierte LINQ-Abfragen?

Beispiel: Angenommen, ich eine grundlegende Abfrage haben aktive Elemente zu erhalten:

Func<DataContext, IQueryable<Item>> GetActiveItems = 
    CompiledQuery.Compile((DataContext context) => 
     context.Items.Where(item => item.IsActive)); 

Ich möchte auf dem obigen Ausdruck bauen, um eine weitere Abfrage zu machen. Die Dokumentation von CompiledQuery zeigt an, dass ich einen anderen Operator für das Ergebnis des kompilierten Delegaten nicht anwenden kann. Was ist der empfohlene Weg, solche Ausdrücke zu refaktorisieren?

Ich denke, ich sollte eine Expression verwenden, aber wie sollte es verwendet werden? Oder gibt es einen besseren Weg?

Antwort

1

Sie so etwas wie PredicateBuilder können dabei helfen:

Die Albahari ein einfach und funktioniert recht gut, obwohl es einfach ist, zu verlängern oder zu entwickeln, die Sie besitzen: http://www.albahari.com/nutshell/predicatebuilder.aspx

Natürlich, wenn Ihre Abfrage beruht eine lokale Methode, die nicht in einen SQL-Ausdruck übersetzt werden kann, müssen Sie neu überdenken, wie Sie es tun.

+0

Vielen Dank. 'PredicateBuilder' war nicht die beste Lösung, aber LinqKits 'Expand'-Methode war genau das, was ich brauchte. Wenn Sie Ihre Antwort bearbeiten könnten (vorzugsweise mit einem kleinen Beispiel), nehme ich sie gerne an. –

-1

Nein. Es ist kompiliert, was bedeutet: bereits in SQL übersetzt. Sie müssen mit einer neuen Abfrage beginnen.

+1

Ich weiß, es ist kompiliert. Was ich tun möchte ist, den Ausdruck zu refaktorieren und ihn in einem anderen wiederzuverwenden. –