Требуется помощь по рефакторингу LINQ - PullRequest
1 голос
/ 21 октября 2009

Как бы вы изменили этот код в отношении LINQ? Я новичок в LINQ и не совсем хорошо разбираюсь в более сложных запросах (вложенных, группирующих).

Могут ли все эти три оператора и цикл foreach быть преобразованы в один оператор LINQ?

void AddSeries(Series series, int phraseId)
{
    using (var db = Database.Instance)
    {
        foreach (var date in db.Ad.Select(ad => ad.DateTime.Date).Distinct())
        {
            var phraseCount = (from pc in db.PhraseCount
                               where pc.DateTime.Date == date && 
                                     pc.PhraseId == phraseId
                               select pc.Count).SingleOrDefault();

            var adCount = db.Ad.Where(ad => ad.DateTime.Date == date).Count();

            series.Add(date, phraseCount / adCount);
        }
    }
}

1 Ответ

1 голос
/ 21 октября 2009

Вот мой первый выстрел. Тяжело без твоей модели.

var q = from ad in db.Ad
        group ad by ad.DateTime.Date into g
        select new
        {
            AdCount = g.Count(),
            Date = g.Key,
            PhraseCount = (from pc in db.PhraseCount
                           where pc.DateTime.Date == g.Key
                                && pc.PhraseId == phraseId
                           select pc).Count()
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...