c# - 处理对数据库的重复 linq 查询的正确做法应该是什么?

标签 c# linq entity-framework linq-to-sql

<分区>

处理对数据库的重复 linq 查询的正确做法应该是什么? 重复查询是指在我的代码中重复出现的此类查询。

例子:

我注意到在我的代码中重复出现以下查询:

dataContext.Users.Where(u =>u.IsActive && u.IsAdmin).OrderByDescent(u => u.Name)

我应该在哪里放置包含上述查询的方法。应该是 UserRepository(以这种方式,我可能会以 god 类结束,这是一种不好的做法)?或者我应该创建类架构来处理这个问题。

我想知道你对此有何看法。您认为哪种类结构最通用且最容易重用。

我想,我可以使用存储过程作为重复查询的地方,但我不想那样做。

最佳答案

是的,它可以UserRepository中, 但你也可以建立一个 Godclass用于标准化查询(创建、删除等)并使用 Service LayerExtensionsGetAll() 中过滤结果UserRepository 中的方法.

更新
我试图更详细地展示它。

  1. 构建一个通用存储库,其中包含用于检索/存储数据的所有语句。
  2. 创建一个从存储库消费/发送到存储库的服务层。
  3. 添加扩展方法以过滤特定结果。 (以 c# 3.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 Conerys MVC StoreFront Preview 相关。其他项目的实现可能会有所不同,但这是一种实现方式。

关于c# - 处理对数据库的重复 linq 查询的正确做法应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12211819/

相关文章:

c# - 我可以使用 Entity Framework 在单个数据库调用中轻松评估多个 IQueryables 吗?

c# - 获取所有标有 [JsonIgnore] 属性的属性

c# - 如何获取服务引用以使用基于第 3 方 WSDL 的消息契约(Contract)正确生成,或者在 WF 服务项目中强制不使用消息契约(Contract)

c# - 根据变量交换图像

c# - 如何设置 ASPNETCORE_ENVIRONMENT 以考虑发布 ASP.NET Core 应用程序

c# - 将二维数组拆分为包含新行的数组

c# - LINQ 删除 UserId 在列表中的所有用户

c# - 远程过程调用 (RPC) 协议(protocol)流不正确

c# - 如何将 OrderBy()、Where() 等作为参数传递给处理集合

c# - 使用 .net WebAPI 创建、更新、删除子实体