Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理对数据库的重复linq查询的正确做法应该是什么?_C#_Linq_Entity Framework_Linq To Sql - Fatal编程技术网

C# 处理对数据库的重复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类结束,这是一种糟糕的做法?或者我应该创建类架构来处理这个问题 我想知道你对此有

处理对数据库的重复linq查询的正确做法应该是什么? 重复查询是指在代码中递归的查询

例如:

我注意到在我的代码中递归了以下查询:

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方法筛选结果应该是一个好的解决方案。但是如何组织类来正确地完成它呢?添加一些代码示例,这可能会激发你的幻想。乍一看,这是非常好的。我将在晚上更详细地回顾代码。谢谢你。你有其他的解决办法吗?