iamserge
@iamserge

Как использовать Where,Select в для такого случая?

Собственно код ниже, буквально это просто поиск при определнных условиях среди словаря. Но вот очень хочется упростить все и записать в одну строку. Простенькие в духе:

ListOfDataBaseCopy.Where(item => item.pPoint == 1).Count();


Легко получаются, но как так придумать чтобы без лишних проходов повторить то что у меня прямо в цикле происходит (все таки всего в один проход) - я что-то не могу осилить ...

Это возможно или может я просто много хочу? На примерах когда формат записи более в стиле SQL понятно что логика тут схожая. Хотя как сделать в SQL в один проход я тоже не знаю =(

Но может быть все таки можно как-то исхитрится? В цикле ведь можно, в этих Select/Where тоже ведь цикл по сути дела т.е. перебор элементов - но как упаковать туда такую конструкцию? То есть хочется получить EventsCount и positiveEventsCount без цикла, просто через Select/Where и еще кажется пару подобных функций для словаря ...

class spanOfDBData
        {

            public Int64 eventID { get; set; }
            public double eventSTART { get; set; }
            public double eventEND { get; set; }
            public int pPoint { get; set; }
            public int flagValue { get; set; }

        }

// Собрал большой словарь таких данных
List<spanOfDBData> ListOfDataBaseCopy = GetEventsBlock();

// Приготовился хранить что насчитаю ... 
Dictionary<double, double> EventsCount = new Dictionary<double, double>();
Dictionary<double, double> positiveEventsCount = new Dictionary<double, double>();

foreach (spanOfDBData EventInfo in ListOfDataBaseCopy){
   
       // Получаю ключ как длинну ивента, делю на 1000 т.к. точность до 0,001 сек тут не нужна пока, я ее упразняю
       double eLen= Math.Round((EventInfo.eventSTART - EventInfo.eventEND ) / 1000);

     // Ипользую ключ чтобы посчитать сколько у меня таких повторяющихся событий
     EventsCount[eLen]++;
    
     // Почти то же самое, только есть дополнительное условие о каких ивентах вести подсчет
     if (EventInfo.pPoint == 1)
           positiveEventsCount [eLen]++;

}
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Поставьте решарпер, большинство его подсказок интуитивно понятно и дает ссылки на необходимые пояснения
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы