CleanCode.AlertFilter.FilterByStatus C# (CSharp) Метод

FilterByStatus() публичный статический Метод

public static FilterByStatus ( this alerts, int primaryStatusId, int secondaryStatusId, bool isNewEntry ) : IEnumerable
alerts this
primaryStatusId int
secondaryStatusId int
isNewEntry bool
Результат IEnumerable
        public static IEnumerable<Alert> FilterByStatus(this IEnumerable<Alert> alerts, int? primaryStatusId, int? secondaryStatusId, bool isNewEntry)
        {
            foreach (var alert in alerts)
            {
                if (alert.PrimaryStatusId.HasValue && alert.SecondaryStatusId.HasValue)
                {
                    if (alert.PrimaryStatusId == primaryStatusId && alert.SecondaryStatusId == secondaryStatusId)
                        yield return alert;
                }
                else if (alert.PrimaryStatusId.HasValue)
                {
                    if (alert.PrimaryStatusId == primaryStatusId && !secondaryStatusId.HasValue)
                        yield return alert;
                }
                else if (alert.SecondaryStatusId.HasValue)
                {
                    if (alert.SecondaryStatusId == secondaryStatusId && !primaryStatusId.HasValue)
                        yield return alert;
                }
                else if (!alert.PrimaryStatusId.HasValue && !alert.SecondaryStatusId.HasValue)
                {
                    if (isNewEntry || primaryStatusId == null & secondaryStatusId == null)
                        yield return alert;
                }
            }
        }
AlertFilter