Cómo obtener el recuento de elementos del modelo usando linq [duplicado]

Nov 09 2020

Estoy trabajando en .NET Core. He anidado modelos que muestran datos en filas.

public class States
{
  public string Name { get; set; }
  public List<DateData> States { get; set; }
}

public class DateData
{
  public DateTime Date { get; set; }
  public StateType type { get; set; }
}

public enum StateType 
{
  Available,
  NotAvailable
}

Donde StateType es enum.

Aquí, States contiene el tipo de estado y cada fecha que se muestra por filas.

Necesito filtrar mi respuesta según la enumeración para obtener el recuento total de la fecha No disponible.

Nota: necesito obtener datos basados ​​en la fecha. Como, todos los datos del 10/09/2020 con StateType.NotAvailable. Los estados de lista contienen varios datos para la misma fecha.

¿Cómo logro esto?

Respuestas

4 DavidEdel Nov 09 2020 at 21:56

Si he entendido correctamente, desea que el objeto de los Estados un recuento de todos de su lista de Estados que no están disponibles

var stateObject= new States()

var count = stateObject.States.Count(x => x.type == StateType.NotAvailable);
3 senz Nov 09 2020 at 21:53

Por un solo Statesobjeto

obj.States.Where(x => x.type == StateType.NotAvailable).Count()

Para una lista de Statesobjetos

objs.SelectMany(x => x.States).Where(x => x.type == StateType.NotAvailable).Count()
2 ADyson Nov 09 2020 at 22:04

Puede filtrar la lista usando una Wherefunción Linq y luego usar Count()para totalizar la cantidad de elementos restantes.

por ejemplo, si ses una instancia de States, entonces:

var count = s.StateList.Where(st => st.type == StateType.NotAvailable).Count();

o alternativamente:

var count = s.StateList.Count(st => st.type == StateType.NotAvailable);

Demostración de trabajo: https://dotnetfiddle.net/IiNpue

NB Cambié el nombre States.Statesa States.StateListporque (en .NET Core 3.1 al menos) una propiedad no puede tener el mismo nombre que su tipo adjunto.