es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Filtrar IQueryable con cualquier elemento de la lista.

Así que tengo una base de datos y estoy tratando de agregar un método a un QueryBuilder que devuelva IQueryable de esta manera:

C#
WHERE
student.Name == "Alan" OR student.Name == "Zoe" OR student.Name == "X" OR ...

Tengo una lista de nombres que puede ser de cualquier tamaño.

El código luce así:

“`C#
public class QueryBuilder
{
private SudentData context;
private IQueryable<students> query;

<pre><code>public QueryBuilder(StudentData context)
{
this.context = context;
query = context.Students;
}

public QueryBuilder WithDateFrom(DateTime date)
{
query = query.Where(x => x.Created >= date);
return this;
}

public QueryBuilder WithName(List<string> names)
{
if (names.Any())
{
//Consulta faltante
return this;
}
else
{
return this;
}
}

public IQueryable<studentdatamodel> Build()
{
return query.Select(x => new StudentDataModel()
{
Name = x.Name,
DateTo = x.DateTo,
DateFrom = x.DateFrom
});
}
</code></pre>

}
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para agregar un método al QueryBuilder que devuelva un IQueryable basado en una lista de nombres, puedes actualizar el método WithName de la siguiente manera:

    public QueryBuilder WithName(List<string> names)
    {
        if (names.Any())
        {
            query = query.Where(student => names.Contains(student.Name));
        }
        return this;
    }
    

    El método actualizado verificará si la lista de nombres no está vacía y luego generará una consulta utilizando el método de extensión Where y el método Contains para filtrar los estudiantes cuyos nombres estén en la lista. El IQueryable actualizado se devolverá mediante el método para permitir el encadenamiento con otros métodos como WithDateFrom para filtrar aún más los resultados.

    Ten en cuenta que es posible que necesites agregar una declaración using para System.Linq para usar el método Contains.

    Con esta modificación, el método Build devolverá un IQueryable que filtra tanto por fecha como por nombre.

Comments are closed.