c# - 使用变量构建实体框架 Linq 查询
问题描述
我正在努力为我偶尔遇到的事情找到最佳实践,每次我都留下这样的印象,即这不是实现我想做的最优雅、最好和最肯定有效的方式。
考虑一下:
模型:
public class User
{
public string firstName {get; set;}
public string lastName {get; set;}
public string middleName {get; set;}
public string someName {get; set;}
// etc... up to, let's say 20 inputs
}
html:
<input type="text" name="firstName">
<input type="text" name="lastName" disabled>
<input type="text" name="middleName" disabled>
<input type="text" name="someName" disabled>```
控制器:
private dbcontext db = new dbcontext();
List<User> users = db.Users.Where( x => firstName != null && x.firstName == fisrtName ||
lastName != null && x.lastName == lastName ||
// and so on, and so on...
现在,另一端的一些人可以选择启用上述输入并使用传递的参数为某些用户查询数据库。
我希望现在你明白我在这里努力理解的内容。我喜欢只使用已启用的变量并将它们组合成AND查询而不是OR。我知道,我知道 - &&用于这件事,但这并不像我想要的那样工作。
我不想使用if 语句来检查每个变量是否为空,然后为可能发生的每个场景创建查询。
如果那是转发,我很抱歉,但我找不到答案。
解决方案
型号:
public class User
{
public string firstName {get; set;}
public string lastName {get; set;}
public string middleName {get; set;}
public string someName {get; set;}
// etc... up to, let's say 20 inputs
}
HTML:
@model YourModel
@Html.TextBoxFor(m => m.firstName, "", new { })
@Html.TextBoxFor(m => m.lastName, "", new { @disabled = true })
@Html.TextBoxFor(m => m.middleName, "", new { @disabled = true })
@Html.TextBoxFor(m => m.someName, "", new { @disabled = true })
控制器:
private readonly YourContext _db;
public YourController(YourContext db)
{
_db = db;
}
[HttpGet]
public async Task<IActionResult> YouReturningView()
{
var model = await _db.YourDbSet.Where(Your Where).FirstAsync();
return View(model);
}
我认为这就是如何做到这一点的优雅和正式的方式。生成的 Html 将具有所有需要的属性,就像您的班级一样。
推荐阅读
- asp.net-core-2.1 - TryApplyChanges 没有得到更新的实际解决方案 Buildalyzer adhocworkspace
- python - 如何将多个不同维度的分类输入变量用于随机森林回归模型?
- docker - denied:请求的资源访问被拒绝
- javascript - 对地址进行地理编码时,标记未显示在地图中
- ecmascript-6 - 为什么在特定情况下需要 ES6 解构?
- c# - 如何停止 Wndproc() 循环?
- ruby-on-rails - 如何在 Rails 服务器控制台中获取 postgressql 数据库本机数据类型
- javascript - 表单提交javascript html中的触发操作
- android - Android中的加密/解密
- performance - 如果 Core Graphics 在后台使用 Metal,Metal 实现能否比 CG 运行得更快?为什么?