RavenDB,LINQ,从string []中选择,其中array不包含给定的字符串

时间:2012-02-27 18:53:42

标签: linq ravendb

给定一个非常简单的string[],我试图用RavenDB的简单LINQ语法完成以下内容。

public class Item {
   public string[] Tags { get; set; }
}
var list = new List<Item> {
  new Item { Tags = new string[] { "one", "two", "three" } },
  new Item { Tags = new string[] { "one", "two" } },
  new Item { Tags = new string[] { "one" } }
};

然后我可以轻松地查询这个,就像这样;

var items = session.Query<Item>().Search( n => n.Tags, "one" ).Take(3).ToList();

这让我可以轻松地获取我想要的string[]中带有标签的所有项目,但我想做相反的事情(显然,对于我的用例,情景要复杂得多,我是为这个例子凝聚它。)

我想编写一个可以与Raven一起使用的LINQ查询,它将为我提供具有给定标记的所有对象。就像'倒置'搜索一样。

包含()已从RavenDB中删除,因此我无法在其上使用反布尔值。到现在为止,我只需要进行查询,然后在结果上使用另一个LINQ命令,我觉得效率非常低。有谁知道如何做到这一点?

我也在RavenDB Google Groups邮件列表中发布此内容。

1 个答案:

答案 0 :(得分:5)

Session.Query<Item>()
       .Where(x => !x.Tags.Any(tag => tag == "one"))
       .ToList();