2016-05-03 17 views
1

ich eine Anfrage an Azure Tabellen Speicher zu senden, die eine Reihe von Organisationen, die mit einer Bedingung auswählt:Azure Table Storage-Filterfehler?

$filter= 
(PartitionKey eq 'key') 
and 
(
    (
     (RowKey gt '08D372E4E0A02B2600000000') 
     and 
     (RowKey le '08D372E4E515E3E9FFFFFFFF') 
    ) 
    and 
    (
     (Done ne 'true') 
     or 
     (EndTimestamp gt '635978299756075046') 
    ) 
) 

Ich brauche alle Datensätze in einem Bereich, der nach entweder nicht vollständig (Done ne ‚true‘) oder vollständig bestimmte Zeit (EndTimestamp gt '635978299756075046'). Fertig ist 'bool?' und EndTimestamp ist "Int64?".

In Fiddler kann ich deutlich sehen, dass ein Datensatz wie folgt zurückgegeben zurück:

{ 
    "PartitionKey":"key", 
    "RowKey":"08D372E4E0A0B8F5002CDBE3", 
    "Done":true, 
    "[email protected]":"Edm.Int64", 
    "EndTimestamp":"635978299737021249", 
} 

Was nicht erfüllt die EndTimestamp Bedingung: 6359782997 ist offensichtlich weniger als 6359782997 .

Scheint wie ein Fehler, oder fehlt mir etwas?

Ich kann zusätzliche Prüfungen zur Laufzeit als Workaround durchführen, aber (1) die den Zweck der Filterung auf Server-Seite vereitelt und (2) Ich möchte den Verkehr und die Anzahl der Abfragen reduzieren - es kann Tausende von Entitäten geben welche die Bedingung nicht erfüllen.

Antwort

1

Das Problem gefunden, das war mein Fehler. Der richtige Zustand ist:

(Done ne true) 
    or 
    (EndTimestamp gt 635978299756075046L) 

ich die TableQuery.GenerateFilterCondition Helfer-Methode verwenden, die nur in Zeichenketten nimmt, so ist es Zitate auf die Werte addiert.

Verwandte Themen