Подсчет количества очков, которые имеют больший тета и большего радиуса, чем на данный момент


Мне не нравится тот факт, что я выбрав все пункты, хотя меня волнует только количество их.

Какие из частей должна появиться первая, если это имеет знаечение?

var count = (from type in ValidTypes()
    from point in GetData(type)
    where point.Radius > referencePoint.Radius
        && point.Theta > referencePoint.Theta
    select point).Count()

ValidTypes() возвращает несколько типов, около 5.

Метода GetData(тип) может возвращать множество точек, возможно 100,000.

Этот запрос подсчитывает количество очков, которые имеют больший тета и большего радиуса, чем на данный момент.

Есть ли способ, чтобы написать это быстрее или более читабельным?



1179
13
задан 21 января 2011 в 07:01 Источник Поделиться
Комментарии
1 ответ

Во-первых, запрос пишется нормально. Его структура не имеет значения; порядок того явно правильный, выберите подходящую. Где вы могли бы искать, что могло изменить запрос (код и, возможно, производительность) будут в метода GetData метод. Если, например, метода GetData является получение данных из внешнего источника запросов, то вы можете переложить фильтрацию, чтобы он , а не получать все данные точки и фильтрацию его внутри вашего приложения, особенно поскольку у вас так много точек данных (потенциально). Так что, возможно, ваш запрос может быть

(from type in ValidTypes()    
select GetData(type, referencePoint).Count())
.Sum();

// or same meaning, different phrasing

(from type in ValidTypes()
from point in GetData(type, referencePoint)
select point).Count();

9
ответ дан 21 января 2011 в 08:01 Источник Поделиться