Azure-Tabellenspeicherbereichsabfrage mit häufig verwendeter Bedingung, die in Methode eingeschlossen ist

7

Ich habe ein häufiges Vorkommen in meiner Anwendung, wo ich eine Abfrage erzeuge, um alle Entitäten zu erhalten, wo der Partitionsschlüssel konstant ist, aber der Zeilenschlüssel innerhalb eines lexikalischen Bereichs liegen sollte (z. B. nur Zeilen, die mit einem Präfix beginnen):

%Vor%

Ich muss CompareTo verwenden, da String-Funktionen wie StartsWith in dieser Art von Abfrage nicht unterstützt werden. Das funktioniert, aber der Zustand ist schwer zu lesen und wiederholt sich sehr. Anstatt also viele Abfragen mit dieser schwer lesbaren Bedingung zu schreiben, möchte ich lieber eine Funktion ausführen, die es "inline" macht:

%Vor%

Aber wenn ich das ausführe, erhalte ich eine Ausnahme von Azure, weil meine Funktion nicht unterstützt wird. Gibt es eine Möglichkeit, dies zu schreiben, so dass es unterstützt wird? Immerhin verwende ich genau die gleiche Bedingung wie die funktionierende Abfrage, nur in eine Funktion eingepackt ...

    
David S. 18.10.2012, 16:01
quelle

2 Antworten

10

Wenn Sie die Bedingung in eine Funktion aufteilen, muss die Funktion einen Ausdrucksbaum und keinen booleschen Wert zurückgeben. Ich weiß nicht, ob LINQ-Abfragesyntax dies unterstützt, aber Sie können es mit der Methodensyntax wie folgt tun:

%Vor%     
Kevin 18.10.2012, 17:52
quelle
17

Hier ist eine Verallgemeinerung von Kevins Antwort. Es macht dasselbe, aber funktioniert für jede Präfix-Zeichenfolge und nicht nur für den speziellen Fall, nach dem David in der ursprünglichen Frage gefragt hat.

%Vor%     
Brian Reischl 23.10.2012 17:56
quelle