2013-04-03 28 views
0

我想根據子集合的值在RavenDB中查找一個或多個文檔。RavenDB SelectMany不支持

我有以下類

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; } 
} 

這是集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; } 
} 

在一個List<MergeFields> mergeFields集合我有沒有存儲在RavenDB又值類。值進行比較,爲找到一個RavenDB文檔中的值,如果它是一個可能的匹配通過執行以下查詢:

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; 
} 

我明白ravenDB不支持SelectMany()那麼我將如何去從文檔獲取結果商店?

回答

1

爲此創建一個索引,以輸出要查詢的值。 請注意,您不能只按照您在此處執行的方式執行任意代碼:JaroWinklerCalculator.jaroWinkler(mf.Value, tf.Value) > .90d

但您可以使用模糊查詢,它們也會執行相同的操作。

+0

感謝Ayende,模糊查詢我假設你的意思是RavenDB已經構建了對JaroWinkler和/或Levenshtein或其中一種算法的支持? – jvanrhyn