首页 > 解决方案 > 使用变量构建实体框架 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 语句来检查每个变量是否为空,然后为可能发生的每个场景创建查询。

如果那是转发,我很抱歉,但我找不到答案。

标签: c#htmlentity-frameworklinqmodel-view-controller

解决方案


型号

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 将具有所有需要的属性,就像您的班级一样。


推荐阅读