2017-05-11 1 views
1

1.) Est-il possible de faire une requête DISTINCT dans LINQ? Comme l'équivalent de la requête AQL ci-dessous?Client ArangoDB .NET: Questions diverses sur les requêtes (DISTINCT, LET/DOCUMENT, AQL brut)

FOR cfg IN test_configuration 
    FOR method IN inspection_method 
     FILTER cfg.inspection_method_id == method._id 
     SORT method.name 
     RETURN DISTINCT method 

2.) Est-il possible de faire "LET doc = DOCUMENT (some._id)"? J'ai essayé quelque chose comme la requête ci-dessous, mais j'ai obtenu une exception à propos du fait que Document n'est pas supporté.

from user in users 
    let dept = db.Document<Department>(user.department_id) 
    where dept.name == "lingerie" 
    select user 

3.) Comment faites-vous des requêtes AQL brutes avec des paramètres de liaison? J'ai essayé CreateStatement(), mais je n'ai pas réussi à le faire pour remplacer le paramètre ('evts' est un IEnumerable avec quelques ID de document).

List<ArangoDB.Client.Data.QueryParameter> parameters = new List<ArangoDB.Client.Data.QueryParameter>() { 
    new ArangoDB.Client.Data.QueryParameter() { 
     Name = "@P1", 
     Value = evts, 
    }, 
}; 

query = Database.CreateStatement<InspectionMethod>(@" 
    FOR cfg IN test_configuration 
     FOR method IN inspection_method 
      FILTER cfg.inspection_method_id == method._id AND cfg.test_event_id IN @P1 
      SORT method.name 
      RETURN DISTINCT method", parameters) 
      .AsEnumerable().AsQueryable(); 

sortie de débogage:

============================== 
5/11/2017 2:02:54 PM 
creating an AQL query: 
query: 
FOR cfg IN test_configuration 
    FOR method IN inspection_method 
     FILTER cfg.inspection_method_id == method._id AND cfg.test_event_id IN @P1 
     SORT method.name 
     RETURN DISTINCT method 
bindVars: 
name: @P1 value: ["test_event/7250917"] 

parsed query with variables replaced: 

FOR cfg IN test_configuration 
    FOR method IN inspection_method 
     FILTER cfg.inspection_method_id == method._id AND cfg.test_event_id IN @P1 
     SORT method.name 
     RETURN DISTINCT method 

Répondre

0

J'ai compris # 3. Je devais enlever le @ du paramètre, mais le laisser dans la requête (je pensais l'avoir essayé avant de poster, mais je suppose que c'était toutes les autres combinaisons).

List<ArangoDB.Client.Data.QueryParameter> parameters = new List<ArangoDB.Client.Data.QueryParameter>() { 
    new ArangoDB.Client.Data.QueryParameter() { 
     Name = "P1", 
     Value = evts, 
    }, 
}; 

query = Database.CreateStatement<InspectionMethod>(@" 
    FOR cfg IN test_configuration 
     FOR method IN inspection_method 
      FILTER cfg.inspection_method_id == method._id AND cfg.test_event_id IN @P1 
      SORT method.name 
      RETURN DISTINCT method", parameters) 
      .AsEnumerable().AsQueryable();