Нахождение «Самого улучшенного» в linq - PullRequest
2 голосов
/ 15 мая 2009

Следующий код - это то, что я использовал, чтобы определить 10 лучших заработка

var top = (from m in db.Stats
           where m.Item.AccountID == AccountID
           && m.DateTime >= month
           && m.DateTime < month.AddMonths(1)
           group m by m.Item into g
           orderby g.Sum(p => p.Earnings) descending
           select g.Key).Take(10).ToArray();

Мне нужно определить, какой предмет улучшился больше всего (%) при сравнении двух разных месяцев. Доступные данные являются только ежедневными итогами. Мне может понадобиться отфильтровать элементы, которые находятся ниже определенного числа «посетителей», то есть где

m.Visitors >= 20

Каков наилучший способ сделать это в Linq-Sql?

1 Ответ

0 голосов
/ 22 апреля 2011

Если вы разделите запрос на две отдельные группы: текущий месяц (или период времени) и предыдущий месяц (или период времени), им будет легче управлять. Для ясности я использую закрытый класс, чтобы сохранить интересующие нас результаты. Вместо этого вы можете использовать существующий класс. Или компилятор может даже быть достаточно умен, чтобы понять, что свойства идентичны и, следовательно, генерировать один и тот же анонимный класс для обоих запросов. В любом случае ...

private class C {
    public object Key { get; set; }

    public object Earnings { get; set; }
}

var thisMonth = (from m in db.Stats
                 where m.Item.AccountID == AccountID
                 && m.DateTime.Month == month
                 group m by m.Item into g
                 select new C { g.Key, g.Earnings });

var lastMonth = (from m in db.Stats
                 where m.Item.AccountID == AccountID
                 && m.DateTime.Month == month.AddMonths(-1)
                 group m by m.Item into g
                 select new C { g.Key, g.Earnings });

Отсюда вопрос объединения результатов для расчета процента прибыли или убытка между двумя наборами. Как только это будет сделано, вы можете отсортировать по максимальным значениям, чтобы получить ваш лучший номер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...