DBから抽出するクラスを、QuerySuggest型のオブジェクトを抽出するためにリファクタリングしようとしています。 Linqを使用して、DBから返されたオブジェクトに対して2つのクエリが行われます。ほとんど同じ2つのLinqクエリからメソッドを抽出します。
2つのクエリがほぼ同一であることは明らかですが、唯一の違いは前者には追加の条件 "& & 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'ていますか? – JLRishe
はい、同じタイプです – davideAlbertini