2013-04-03 5 views
0

J'essaie de trouver un ou plusieurs documents dans RavenDB en fonction des valeurs d'une collection enfant.RavenDB SelectMany non pris en charge

J'ai les classes suivantes

public class GoldenDocument 
{ 
    public GoldenDocument() 
    { 
     LinkedDocuments = new List<LinkedDocument>(); 
     MergeMatchFields = new List<MergeMatchField>(); 
    } 

    public string Id { get; set; } 
    public Guid SourceRowId { get; set; } 
    public List<MergeMatchField> MergeMatchFields { get; set; } 
    public List<LinkedDocument> LinkedDocuments { get; set; } 
} 

Et la classe qui se trouve dans la collection MergeMatchFields

public class MergeMatchField 
{ 
    public string Id { get; set; } 
    public Guid OriginId { get; set; } 
    public string Name { get; set; } 
    public MatchType MatchType { get; set; } 
    public double MatchPerc { get; set; } 
    public string Value { get; set; } 
} 

Dans une collection List<MergeFields> mergeFields j'ai des valeurs qui ne sont pas stockées dans RavenDB encore. Les valeurs sont comparées à des valeurs dans un document RavenDB pour savoir si ce dernier est une correspondance possible en exécutant la requête suivante:

using (var session = documentStore.OpenSession()) 
{ 
    var docs = from gd in session.Query<GoldenDocument>() 
       from mf in gd.MergeMatchFields 
       from tf in mergeFields 
       where mf.Name == tf.Name 
       && JaroWinklerCalculator.jaroWinkler(mf.Value, tf.Value) > .90d 
       && !string.IsNullOrEmpty(mf.Value) 
       select gd; 
} 

Je comprends que RavenDB ne supporte pas SelectMany() alors comment pourrais-je obtenir les résultats du document le magasin?

Répondre

1

Créez un index pour cela qui afficherait les valeurs que vous souhaitez interroger. Notez que vous ne pouvez pas exécuter du code arbitraire comme vous le faites ici: JaroWinklerCalculator.jaroWinkler(mf.Value, tf.Value) > .90d

Mais vous pouvez utiliser des requêtes floues, et ils feront de même.

+0

Merci Ayende, avec des requêtes floues Je suppose que vous voulez dire que RavenDB a intégré le support de JaroWinkler et/ou Levenshtein ou l'un de ces algorithmes? – jvanrhyn