【发布时间】:2017-02-10 16:02:15
【问题描述】:
我正在尝试重构一个类,该类从数据库中提取一些 QuerySuggest 类型的对象。使用 Linq 对从 DB 返回的对象进行两次查询。
很明显,这两个查询几乎相同,唯一的区别是前者我有一个附加条件:“ && e.UserId == request.UserId”。
这在我看来是一种代码味道,我想重构它,但我不确定如何进行。
这是我需要重构的代码示例:
IRepository<QuerySuggest> repository = _repositoryManager.GetRepository<QuerySuggest>(_repositoryType);
//entitiesByUser contains all the query suggest by the user
var entitiesByUser = repository.Query(c => c.Where(e => e.IdWebsite == request.WebSiteId &&
e.FulltextFree != null &&
e.DataOra >= (System.DateTime.Today.AddDays(-60).Date) &&
e.UserId == request.UserId)
.GroupBy(g => g.FulltextFree)
.Select(n => new { FulltextFree = n.Key, HowMany = n.Count() })
.Where(w => w.HowMany >= request.HowMany)
.OrderBy(o => o.HowMany))
.ToList();
//entitiesByUser contains all the query suggest not from user
var nonUserEntities = repository.Query(c => c.Where(e => e.IdWebsite == request.WebSiteId &&
e.FulltextFree != null &&
e.DataOra >= (System.DateTime.Today.AddDays(-60).Date))
.GroupBy(g => g.FulltextFree)
.Select(n => new { FulltextFree = n.Key, HowMany = n.Count() })
.Where(w => w.HowMany >= request.HowMany)
.OrderBy(o => o.HowMany))
.ToList();
【问题讨论】:
-
request在这两种情况下是同一种类型吗? -
是的,是同一类型