Contiene es de hecho aún no está soportada (Tal vez que debería ser, pero eso es harina de otro costal - sólo realmente añadir soporte para varios operadores cuando su pedido)
En cuanto a múltiples consultas en cualquier, supongo que' estamos tratando de hacer los datos dinámicos y que quiere lograr algo así como
"X OR Y OR Z"
Eso es un asunto difícil, y el proveedor de LINQ por defecto se agregarán los múltiples cláusulas WHERE con y, por lo que su ejemplo se parece
"X AND Y AND Z"
Que obviamente nunca será el caso.
Su mejor opción para esto es que bajar a la consulta de Lucene (al menos por ahora) y hacer algo como esto:
var results = s.Advanced.LuceneQuery<Item>()
.Where(string.Format("Tags,:({0})", string.Join(" OR ", tags)));
sentido?
La consulta anterior se verá algo como
"Tags,:(X OR Y OR Z)"
Nota: "Tags", informa RavenDB que las etiquetas es una matriz
bien, [editar]!
La forma más fácil de obtener lo que realmente desea es hacer algo en este sentido
new IndexDefinition<Item, Item>()
{
Map = docs => from doc in docs
select new
{
Tags = doc.Tags
},
Indexes = {{ x => x.Tags, FieldIndexing.Analyzed }}
}.ToIndexDefinition(store.Conventions));
continuación para consultar sus ands, se puede hacer algo como esto:
var results = s.Advanced.LuceneQuery<Item, WhateverYouCalledThatIndex>()
.Where(string.Format("Tags:({0})", string.Join(" AND ", tags)));
Ahora, hay que tener en cuenta
Tags = doc.Tags
Wi ll serializar todo el conjunto en un blob gigante, ya que son solo cadenas las que funcionarán para este ejemplo.
Busco a mejores formas de expresar esto, es poco probable que vamos a llegar a una forma de LINQ-ish de hacer esto, ya que en realidad no mapa aprecia muy bien - pero es una respuesta que va a trabajar :)
creo que será bastante como para ser capaz de hacer al menos
Map = docs => from doc in docs
select new
{
Tags = String.Join(" ", doc.Tags)
},
(Esto no funcionará de modo que no lo intente), pero es un poco más explícito sobre lo que quieres lograr
¿Qué es el tipo de devolución 'GetQueryable()'? y qué estás haciendo en 'query = query.Where (i => i.Tags.Contains (tag));'? ¿Cuál es el tipo de consulta? –
GetQueryable() devuelve un IQueryable- . Sin embargo, tengo acceso a toda DocumentSession, así que eso fue solo un ejemplo. –
CodingInsomnia