Собственно код ниже, буквально это просто поиск при определнных условиях среди словаря. Но вот очень хочется упростить все и записать в одну строку. Простенькие в духе:
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]++;
}