2014-08-27 121 views
2

我需要执行一个查询来检查集合是否在给定集合中,就像正在运行的常规集合一样。RavenDB Collection“in”集合查询

class Post 
{ 
    public string[] Tags {get;set;} 
} 


session.Queury<Post>.Where(x=>x.Tags.in(new[]{".net","c#","RavenDB"})).ToList(); 

所以,如果我有我的DB:

new Post{Tags= new[]{"C#",".net"}}; 

将返回

,但如果我有:

new Post{Tags= new[]{"C#",".net","SQLServer"}}; 

将不予退还。

更新:

什么,我试图做的是这样的:

session.Query<Post>() 
    .Where(x => x.Tags.All(y => y.In(new[] { "C#", ".net", "RavenDB" }))) 
    .ToList(); 

,但我得到System.NotSupportedException。

回答

1

我设法找到一个解决方案:

static void Main(string[] args) 
{ 
    var sessionStore = new EmbeddableDocumentStore 
    { 
     RunInMemory = true, 
     UseEmbeddedHttpServer = true, 
     Conventions = 
     { 
      DefaultQueryingConsistency = ConsistencyOptions.AlwaysWaitForNonStaleResultsAsOfLastWrite 
     } 
    }; 

    sessionStore.Initialize(); 

    using (var session = sessionStore.OpenSession()) 
    { 
     var allTags = new[] {"C#", ".net", "RavenDB", "Linux", "Mac"}; 
     var tagsCollection = new[] {"C#", ".net", "RavenDB"}; 

     var complementTagsCollection = allTags.Except(tagsCollection).ToList(); 

     session.Store(new Post 
     { 
      Tags = new List<string>{"C#",".net"} 
     }); 

     session.SaveChanges(); 

     // Posts where all their tags are in tagsCollection 
     var result = session.Query<Post>().Where(x => !x.Tags.In(complementTagsCollection)).ToList(); 
    } 
} 
0

IN的工作方式,它匹配任何一个。 如果你想匹配所有你必须做每个单独的检查。

+0

如何?我试过的每一个方法都不起作用:( – tal952 2014-08-28 06:42:15