需要LINQ重构帮助

时间:2009-10-21 15:41:52

标签: linq linq-to-sql

关于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 个答案:

答案 0 :(得分:1)

这是我的第一枪。没有你的模特就很难。

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()
        }