Tengo un mongodb y quiero filtrar un valor dentro de una lista en mis documentos.
Mis documentos se ven así:
{"_id": "guid" , "mylist": {"stuff": "a", "morestuff": "b"} }Me gustaría encontrar un documento donde "cosas" dentro de "mylist" sea "a" usando expresiones linq en el método FindAsync.
Mi mejor esfuerzo hasta ahora:
collection.FindAsync(item => item.mylist.Where(item2 => item2.stuff == "a") )Desafortunadamente, C# no aceptará esta declaración y recibo los siguientes errores:
No se puede convertir implícitamente el tipo "System.Collections.Generic.IEnumerable" a "bool"
No se puede convertir la expresión lambda al tipo de delegado previsto porque algunos de los tipos de valor devuelto en el bloque no se pueden convertir implícitamente al tipo de valor devuelto del delegado"
Soy relativamente nuevo en linq y en su mayoría he estado usando resharper para hacerlo por mí, por lo que probablemente me esté perdiendo algo muy básico aquí.
Lo siento, entendí mal su pregunta, solo debe reemplazar Where (que le da una colección de elementos que pasan a su expresión) con Any que devuelva verdadero si hay algún elemento en la colección para que esa expresión sea verdadera.
Utilice la siguiente consulta:
collection.FindAsync(Builders<YourClass>.Filter.ElemMatch( f=>f.mylist, item2=>item2.stuff=="a"))Creo que este también funcionará:
collection.FindAsync(x=>x.mylist.Any(b=>b.stuff=="a"))