entity-framework - 如何在实体框架中编写通用查询?
问题描述
我有 3 种方法 这些是相同的方法 只有一些参数会改变 我想写一种方法 我该怎么写
public string method1(int id)
{
var getAllStudents = rep.Students.Where(e => e.StudentId == id).ToList();
foreach (var item in getAllStudents)
{
if (item.isActive != true)
return "Error";
}
return "OK";
}
public string method2(int id)
{
var getAllTeachers = rep.Teachers.Where(e => e.TeacherId == id).ToList();
foreach (var item in getAllTeachers)
{
if (item.isActive != true)
return "Error";
}
return "OK";
}
public string method3(int id)
{
var getAllClasses = rep.Classes.Where(e => e.ClassId == id).ToList();
foreach (var item in getAllClasses)
{
if (item.isActive != true)
return "Error";
}
return "OK";
}
我认为有一种非常简单的方法可以编写 1 方法。认为是参数具有不同ID的地方..谢谢。
解决方案
避免基于参数的条件逻辑。这导致代码脆弱,因为每个参数组合都必须经过测试才能被认为是可靠的。这导致复杂的代码很容易出现错误。拥有更简单的单一用途方法通常更可靠,更易于理解和维护。
例如,给出您的示例并假设“rep”是您实例的 DbContext ...
public bool IsActiveStudent(int id)
{
bool result = rep.Students.Any(x => x.StudentId == id && x.IsActive);
return result;
}
public bool IsActiveTeacher(int id)
{
bool result = rep.Teachers.Any(x => x.TeacherId == id && x.IsActive);
return result;
}
public bool IsActiveClass(int id)
{
bool result = rep.Classes.Any(x => x.ClassId == id && x.IsActive);
return result;
}
通过简单地返回 .Any() 结果,这些基本上可以是单行的。我倾向于先将结果选择到一个变量中,然后在单独的行上返回它,因为它更容易断点和检查。
如果您需要为“Ok”与“Error”返回一个字符串,那么:
return result ? "OK" : "Error";
方法应该努力做一件事,并且把它做好。如果需要,易于理解和排除故障。在方法中添加参数和条件代码只会使代码更加不稳定并为错误留下漏洞。最后,当可以简化初始方法时,它不会使代码更短。
推荐阅读
- ruby - error when searching through 2d array ruby
- turn - How does Turn server actually helps clients behind NAT?
- r - 如何处理多元回归中的坐标
- angular - 带有 Angular 7 的 SVG.js 3“没有兼容的调用签名”错误
- vb.net - 为什么新选项卡文本向右对齐?
- java - ObjectInputStream 代码可在一台计算机上运行,但不能在另一台计算机上运行
- java - 有没有办法确保我的数组不返回空值,或者修复我的数组以使其不返回?
- node.js - 如何隐藏<返回
我已经转换了一个 P 标记以将其发送到我的数据库,现在从我的数据库中检索它,但节点或 ejs 没有将 p 标记呈现为 ap 或 html 标记。
我正在尝试将ckeditor作为格式化工具将textarea输出为html,但它将标签转换为<>,当我现在在nodejs中使用php时它工作得很好,它不会将它们转换回<><%= rs.comment %> //输出变量包
- c++ - 桌面上方的 X11/GLX 窗口
- java - 未选中调用 submitList(List
) 作为原始类型 ListAdapter 的成员