Linq to sql LINQ到SQL重构foreach帮助
这可以重构成一个LINQ语句吗?我觉得它可以,但我不能绕着它转。扩展方法和LINQ的混乱在我看来很难看 db是一个数据上下文Linq to sql LINQ到SQL重构foreach帮助,linq-to-sql,refactoring,Linq To Sql,Refactoring,这可以重构成一个LINQ语句吗?我觉得它可以,但我不能绕着它转。扩展方法和LINQ的混乱在我看来很难看 db是一个数据上下文 void AddToSeries(Series series, DateTime date) { foreach (var date in db.Ad.Select(ad => ad.DateTime.Date).Distinct()) { var phraseCount = (from pc in db.PhraseCount
void AddToSeries(Series series, DateTime date)
{
foreach (var date in db.Ad.Select(ad => ad.DateTime.Date).Distinct())
{
var phraseCount = (from pc in db.PhraseCount
where pc.DateTime.Date == date
select pc.Count).SingleOrDefault();
var adCount = db.Ad.Where(ad => ad.DateTime.Date == date).Count();
series.Add(new KeyValuePair<DateTime, double>(date, adCount));
}
}
首先重构到一致的风格
void AddToSeries(Series series, DateTime date)
{
var dates = db.Ad
.Select(ad => ad.DateTime.Date)
.Distinct();
foreach (DateTime date in dates)
{
var phraseCount = db.PhraseCount
.Where(pc => pc.DateTime.Date == date)
.Select(pc => pc.Count)
.SingleOrDefault();
var adCount = db.Ad
.Where(ad => ad.DateTime.Date == date)
.Count();
series.Add(new KeyValuePair<DateTime, double>(date, adCount));
}
}
啊哈:
不使用短语计数
键是日期,值是计数
多次数据库访问没有乐趣
此方法的日期参数被foreach变量阻止
现在我们可以重构:
void AddToSeries(Series series, DateTime date)
{
var pairs = db.Ad
.GroupBy(ad => ad.DateTime.Date)
.Select(g => new {key = g.Key, theCount = g.Count()});
foreach (var x in pairs)
{
series.Add(new KeyValuePair<DateTime, double>(x.key, x.theCount));
}
}
首先重构到一致的风格
void AddToSeries(Series series, DateTime date)
{
var dates = db.Ad
.Select(ad => ad.DateTime.Date)
.Distinct();
foreach (DateTime date in dates)
{
var phraseCount = db.PhraseCount
.Where(pc => pc.DateTime.Date == date)
.Select(pc => pc.Count)
.SingleOrDefault();
var adCount = db.Ad
.Where(ad => ad.DateTime.Date == date)
.Count();
series.Add(new KeyValuePair<DateTime, double>(date, adCount));
}
}
啊哈:
不使用短语计数
键是日期,值是计数
多次数据库访问没有乐趣
此方法的日期参数被foreach变量阻止
现在我们可以重构:
void AddToSeries(Series series, DateTime date)
{
var pairs = db.Ad
.GroupBy(ad => ad.DateTime.Date)
.Select(g => new {key = g.Key, theCount = g.Count()});
foreach (var x in pairs)
{
series.Add(new KeyValuePair<DateTime, double>(x.key, x.theCount));
}
}
请求使用短语计数是为了什么?请求使用短语计数是为了什么?