我需要预先形成一个查询,检查一个集合是否在给定集合中,就像常规操作一样,但是对于集合。
class Post
{
public string[] Tags {get;set;}
}
session.Queury<Post>.Where(x=>x.Tags.in(new[]{".net","c#","RavenDB"})).ToList();
所以,如果我在我的数据库中:
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。
答案 0 :(得分: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();
}
}
答案 1 :(得分:0)
IN的工作方式,它与任何一个匹配。 如果你想匹配所有你必须单独检查每个。