C# 处理对数据库的重复linq查询的正确做法应该是什么?
处理对数据库的重复linq查询的正确做法应该是什么? 重复查询是指在代码中递归的查询 例如: 我注意到在我的代码中递归了以下查询:C# 处理对数据库的重复linq查询的正确做法应该是什么?,c#,linq,entity-framework,linq-to-sql,C#,Linq,Entity Framework,Linq To Sql,处理对数据库的重复linq查询的正确做法应该是什么? 重复查询是指在代码中递归的查询 例如: 我注意到在我的代码中递归了以下查询: dataContext.Users.Where(u =>u.IsActive && u.IsAdmin).OrderByDescent(u => u.Name) 我应该将包含上述查询的方法放置在何处。如果是这样的UserRepository,我可能会以god类结束,这是一种糟糕的做法?或者我应该创建类架构来处理这个问题 我想知道你对此有
dataContext.Users.Where(u =>u.IsActive && u.IsAdmin).OrderByDescent(u => u.Name)
我应该将包含上述查询的方法放置在何处。如果是这样的UserRepository,我可能会以god类结束,这是一种糟糕的做法?或者我应该创建类架构来处理这个问题
我想知道你对此有什么想法。您认为什么样的类结构最通用,最容易重用
我想,我可以使用存储过程作为重复查询的场所,但我不想这样做。是的,它可以在UserRepository中,但您也可以为标准化查询创建、删除、,依此类推,并使用服务层或扩展来过滤UserRepository中GetAll方法的结果
更新
我想把它展示得更详细一点
构建一个通用存储库,其中保存所有语句以检索/存储数据。
创建从存储库消费/发送到存储库的服务层。
添加扩展方法以筛选特定结果。以C3.0为特色
一些代码:
// 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 Connery的MVC店面预览相关。其他项目的实现可能有所不同,但这是一种实现方法 对不起,我不太明白你的意思。从GetAll方法筛选结果应该是一个好的解决方案。但是如何组织类来正确地完成它呢?添加一些代码示例,这可能会激发你的幻想。乍一看,这是非常好的。我将在晚上更详细地回顾代码。谢谢你。你有其他的解决办法吗?