2017-05-10 11 views
0

Windows 10でArangoDB .NETクライアントを使用しています(0.7.60、0.7.50も試してみました(両方ともNuGET) )。ArangoDB .NETクライアントのクエリ結果はソートされていません(OrderBy/Sortは機能しません)

LINQクエリを実行し、Sort()またはOrderByを使用すると、結果はソートされずに戻されます(自然順/時間順)。

生成されたクエリは正しいと思われます。私がArangoDB Webインターフェイスでそれを実行すると、期待される結果が得られました。しかし、.NETクライアントを介してはそうではありません。

コード:

[CollectionProperty(CollectionName = "users")] 
class User 
{ 
    [DocumentProperty(Identifier=IdentifierType.Key)] 
    public string Key { get; set; } 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

static void Main(string[] args) 
{ 
    ArangoDatabase.ChangeSetting(o => { 
     o.Url = "http://localhost:8529"; 
     o.Database = "test"; 
     o.Logger = new ArangoDB.Client.DatabaseLogSharedSetting() { 
      HttpRequest = true, 
      Aql = true, 
      Log = log => Debug.WriteLine(log), 
     }; 
    }); 

    using (ArangoDatabase db = new ArangoDatabase()) 
    { 
     var query = db.Query<User>() 
      .OrderBy(o => o.Name); 

     foreach (User user in query) 
      Console.WriteLine(user.Name); 
    } 

    Console.ReadLine(); 
} 

出力:

jimmy 
tony 
ozzy 
bjork 

デバッグ出力:

============================== 
5/10/2017 2:21:28 PM 
creating an AQL query: 
query: for `o` in `users` sort `o`.`Name` asc return `o` 
============================== 
5/10/2017 2:21:28 PM 
sending http request: 
url: http://localhost:8529/_db/test/_api/cursor 
method: POST 
'ArangoConsoleTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'ArangoConsoleTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Serialization\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Serialization.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
data: {"query":" for `o` in `users` sort `o`.`Name` asc return `o`","options":{"optimizer":{"rules":[]}}} 
============================== 
5/10/2017 2:21:30 PM 
received http response: 
url: http://localhost:8529/_db/test/_api/cursor 
status-code: Created 
data: "{\"result\":[{\"_key\":\"jimmy\",\"_id\":\"users/jimmy\",\"_rev\":\"_U68WDkm---\",\"name\":\"jimmy\",\"age\":1},{\"_key\":\"1193\",\"_id\":\"users/1193\",\"_rev\":\"_U676wfm---\",\"name\":\"tony\",\"age\":42},{\"_key\":\"1432\",\"_id\":\"users/1432\",\"_rev\":\"_U674_PS---\",\"name\":\"ozzy\",\"age\":69},{\"_key\":\"1387\",\"_id\":\"users/1387\",\"_rev\":\"_U673Suy---\",\"name\":\"bjork\",\"age\":50}],\"hasMore\":false,\"cached\":false,\"extra\":{\"stats\":{\"writesExecuted\":0,\"writesIgnored\":0,\"scannedFull\":4,\"scannedIndex\":0,\"filtered\":0,\"executionTime\":0.0010030269622802734},\"warnings\":[]},\"error\":false,\"code\":201}" 

答えて

0

私はそれを考え出しました。私のコレクション(ArangoDB)では、年齢と名前フィールドはすべて小文字(年齢と名前)ですが、私のモデルクラス(.NET)では年齢/名前です。

クエリではエラーが発生していないので、名前は大文字と小文字を区別していませんでしたが、LINQのものや並べ替えには当てはまりませんでした。

My Nameプロパティに[DocumentProperty(PropertyName = "name")]を追加すると、ソートの問題が修正されました。問題の原因についてPhuoの答えで

0

ルックメンバー名は、使用することができキャメルケースの形である場合には、別の解決策は次のとおりです。

[DocumentProperty(Naming = NamingConvention.ToCamelCase)] 
public string Name { get; set; } 

またはすべてのメンバーが命名のためのクラス属性を使用して、キャメルケースである場合大会

[CollectionProperty(Naming= NamingConvention.ToCamelCase)] 
public class User 
{ ... } 

すべてのメンバーが名前を付けるこの方法は、負荷のドキュメントにそのキャメルケース形式(User -> user)に変換するドキュメントを保存し、AQLクエリや他の操作します。

関連する問題