对数据库处理重复的linq查询应该是什么样的正确做法? 通过重复查询,我的意思是在我的代码中重复出现的这类查询。
示例:
我注意到我的代码在查询后再次出现:
dataContext.Users.Where(u =>u.IsActive && u.IsAdmin).OrderByDescent(u => u.Name)
我应该在哪里放置包含上述查询的方法。它应该是UserRepository
(以这种方式,我可能会以上帝的课程结束这是不好的做法)?或者我应该创建类架构来处理这个问题。
我想知道你对此有何看法。您认为哪种类结构最通用且易于重用。
我记得,我可以使用商店程序作为重复查询的地方,但我不想这样做。
答案 0 :(得分:1)
是的,可以位于UserRepository
,但您也可以为标准化查询(创建,删除等)构建Godclass
并使用Service Layer
或Extensions
的结果来过滤GetAll()
中UserRepository
方法的结果。
<强>更新强>
我试图更详细地展示它。
一些代码:
// Repository (non-generic)
private IQueryable<User> GetUser()
{
var results = from u in _db.Users
select new User
{
ID = u.ID,
Username = u.Username,
// and so on
};
return results;
}
//Service Layer
private User GetUser(string Username)
{
User u = _repository.GetUser().WithUsername(username)
.SingleOrDefault();
}
// Extension Method
public static IQueryable<User> WithUsername(this IQueryable<User> qry, string username)
{
return from u in qry
where u.Username == username
select u;
}
此方法与Rob Conerys MVC StoreFront Preview有关。其他项目的实施可能会有所不同,但这是一种方法。