RavenDB, LINQ, выберите из строки [], где массив не содержит данную строку - PullRequest
3 голосов
/ 27 февраля 2012

Учитывая очень простое string[], я пытаюсь выполнить следующее в простом синтаксисе LINQ с помощью RavenDB.

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[], которые я хочу, но я хочу сделать наоборот (очевидно, для моего сценария использования сценарий намного сложнее,Я сокращаю его для этого примера).

Я хочу написать запрос LINQ, который будет работать с Raven, который даст мне все объекты, которые не имеют данный тег.Подобно «инвертированному» поиску.

Contains () был удален из RavenDB, поэтому я не могу использовать для него обратный логический тип.До сих пор мне просто нужно было сделать запрос, а затем использовать другую команду LINQ для результата, что я считаю крайне неэффективным.Кто-нибудь знает, как это сделать?

Я также публикую это в Списке рассылки RavenDB Группы Google.

1 Ответ

5 голосов
/ 27 февраля 2012
Session.Query<Item>()
       .Where(x => !x.Tags.Any(tag => tag == "one"))
       .ToList();
...