2016-04-22 8 views
3

私はCustomerという名前のコレクションがあり、各エントリにはNumberという名前のプロパティがあります。DocumentDB STARTSWITHが.NETで動作していない

[ 
    { 
     "Number": "K1", 
     "Label": "Test1"   
    } 
] 

SELECT * FROM c WHERE STARTSWITH(c.Number, 'K') 

これは私に正しい結果を与える:

[ 
    { 
     "Number": "K1", 
     "Label": "Test1"   
    }, 
    { 
     "Number": "T1", 
     "Label": "Test2"   
    } 
] 

私はAzureのポータルは、このコレクションに対して次のクエリを発射するために使用します。ここで選択したすべてのコマンドの内容は、

しかし、C#でDocumentDB NuGetパッケージを使用すると、

var options = new FeedOptions(); 
var query = "SELECT * FROM c WHERE STARTSWITH(c.Number, 'K')"; 
var items = client.CreateDocumentQuery<Customer>(uri, options, query).ToList() 

この場合、毎回すべてのアイテム(この場合は2個)が取得されます。

CreateDocumentQueryが完全にこのステートメントを無視しているようです。

編集

クエリのためのActivityIDは7f473650-f125-4b6b-9d4c-2d520deceebdです。

+0

いくつかの追加の詳細は、根本的な原因を特定するのに役立ちます。 Fiddlerを実行して、電信で送信されたクエリテキストを確認してください。または、完全なサンプルを貼り付けることができたり、クエリのActivityIDを共有したりすると役立ちます。 –

+0

@AravindRamachandran投稿にアクティビティを追加しました。私はFiddlerをhttpsで正しく動作させることができないので、Fiddlerをチェックすることはできません。私はそこにURLを見ることができません。 – sprinter252

答えて

1

CreateDocumentQueryの定義を見ては、そのパラメータを使用して、代わりにクエリのオプションを配置する場合にのみ、コレクション内のすべてのアイテムを取得するようuriqueryoptionsは...、それは、NULLとしてクエリをデフォルトになります。

public IQueryable<T> CreateDocumentQuery<T>(Uri documentCollectionOrDatabaseUri, SqlQuerySpec querySpec, FeedOptions feedOptions = null, object partitionKey = null); 

に変更し、それを:

var items = client.CreateDocumentQuery<Customer>(uri, query, options).ToList() 
+0

それは仕事をした! – sprinter252

+0

私は少し違った経験をしました。私は 'STARTWITH'動詞を使うと、悪い結果しか得られませんでした。私が平等をチェックしただけで、正しい結果が得られました。とにかく、これは問題の解決に役立ちました。ありがとう。 – nhwilly

関連する問題