Cómo obtener el recuento de elementos del modelo usando linq [duplicado]
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
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);
Por un solo States
objeto
obj.States.Where(x => x.type == StateType.NotAvailable).Count()
Para una lista de States
objetos
objs.SelectMany(x => x.States).Where(x => x.type == StateType.NotAvailable).Count()
Puede filtrar la lista usando una Where
función Linq y luego usar Count()
para totalizar la cantidad de elementos restantes.
por ejemplo, si s
es 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.States
a States.StateList
porque (en .NET Core 3.1 al menos) una propiedad no puede tener el mismo nombre que su tipo adjunto.