Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

131
Views
Campo que contiene todas las cadenas de una matriz

¿Cómo realizar la siguiente consulta de Entity Framework en el controlador MongoDB C#?

Obtenga todos los objetos que contienen todas las palabras clave del filtro, en su propiedad de nombre

 var keywords = filter.Split(' '); _context.Businesses .Where(b => keywords.All(s=>b.Name.Contains(s))) .ToList();

Intenté ejecutar la misma consulta en mongo pero entiendo que el filtro no es compatible

 _collection.Find<Business>(b => keywords.All(s => b.Name.Contains(s))).ToList();

La excepción

Se produjo una excepción de tipo 'System.ArgumentException' en MongoDB.Driver.dll pero no se manejó en el código de usuario Información adicional: Filtro no admitido: All(value(System.String[]).where({document}{Name}.Contains ({documento}))).

Solución

Cambié la consulta como sugirió M.Wiśnicki

 return _collection.AsQueryable<Business>().AsEnumerable().Where(b => keywords.All(keyword => b.Name.Contains(keyword))).ToList();
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

La respuesta propuesta estará bien, pero de esta manera obtendrá todos los datos para el cliente, la consulta podría ejecutarse directamente en MongoDB :

 var results = _collection.Find(Builders<Business>.Filter.Not( Builders<Business>.Filter.ElemMatch( x=>x.keywords, k=>!k.Name.Contains(s))));

Es un poco complicado, porque filtramos todos los valores que no (no contienen s), pero funciona. Si no tiene una gran cantidad de datos, está bien consultar Enumerable como ya se propuso.

over 4 years ago · Santiago Trujillo Report

0

En MongoDB, necesita usar una colección fuertemente tipada cuando llama a consultas LINQ. Por lo tanto, debe usar AsEnumerable() , esta salida de retorno como IEnumerable<out T> y podrá usar LINQ. Su consulta debería verse como

 var results = Businesses.AsEnumerable().Select(x => x.ToLower()) .Where(x => keywords.All(x.Contains));
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!