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.

Utilizando una propiedad de lista para filtrar un DbSet con LINQ

Tengo un evento que tiene una lista de tareas del personal:

public class Evento()
{
  public Guid? StaffId { get; set; }
}

public class TareaDelPersonal()
{
  public Guid StaffId { get; set; }
  public Guid TaskId { get; set; }
}

¿Cómo haría algo como esto para obtener todos los eventos para una lista de miembros del personal?

var tareasDelPersonal = new List<tareadelpersonal>() 
{ 
  new TareaDelPersonal () { StaffId = "guid1", TaskId = "guid2" },
  new TareaDelPersonal () { StaffId = "guid3", TaskId = "guid4" }
};

queryable = _db.Eventos.AsQueryable()
  .Where(evento => 
      tareasDelPersonal.Any(tp => tp.StaffId == evento.StaffId)
  );

Actualmente obtengo este error al ejecutar lo anterior:

La expresión LINQ ”DbSet()
.Where(e => __tareasDelPersonal
.Any(tp => (Nullable)tp.StaffId == e.StaffId))’ no se pudo traducir. Reescriba la consulta en una forma que pueda traducirse o cambie a una evaluación del cliente explícitamente insertando una llamada a ‘AsEnumerable’, ‘AsAsyncEnumerable’, ‘ToList’ o ‘ToListAsync’.

El objetivo sería que esto devolviera solo el segundo y tercer evento aquí

var eventos = new List() {
new Event() { StaffId = null },
new Event() { StaffId = “guid1” },
new Event() { StaffId = “guid2” },
new Event() { StaffId = “guid20” },
new Event() { StaffId = null }
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar la cláusula Where para filtrar los eventos en función de los StaffIds en la lista staffTasks. Dado que StaffId en Event es nulo, debe convertirlo explícitamente a Nullable antes de compararlo con StaffId en StaffTask:

    csharp
    queryable = _db.Events.AsQueryable()
    .Where(evento =>
    staffTasks.Any(st => (Nullable)st.StaffId == evento.StaffId)
    );

Comments are closed.