2012-02-27 59 views
3

给定一个非常简单的string[],我试图用RavenDB以简单的LINQ语法完成以下内容。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[],我希望有一个标签,但我想要做的相反(很明显,我的用例场景是一个复杂得多,我冷凝它为这个例子)。

我想写一个LINK查询,它将与Raven一起工作,它会给我所有的对象做而不是有给定的标记。就像一个'颠倒'的搜索。

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

我也在RavenDB的Google Groups邮件列表上发帖。

回答

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

-insert facedesk-谢谢。我不敢相信我没有尝试过。我尝试了五十多种不同的东西,但从未想过最简单的一种。 – Ciel 2012-02-27 20:44:26

相关问题