mwi*_*son 3 c# sql entity-framework-core
where如果通过 url 传入特定内容,我尝试添加一个附加子句queryParameter,但它似乎不起作用。在我开始执行原始sql之前,我想首先弄清楚我是否做得正确(文档似乎很少,因为我找不到任何东西)
为了简洁起见最小化代码
public IActionResult RetrieveAll([FromQuery] string orderByDate, [FromQuery] string taskStatus)
{
try
{
var taskQuery = (from t in _context.Tasks select t);
switch(taskStatus)
{
case "completed":
taskQuery.Where(t => t.IsCompleted == true);
break;
case "notcompleted":
taskQuery.Where(t => t.IsCompleted == false);
break;
}
var tasks = taskQuery.ToList();
return Ok(tasks);
}
catch (Exception ex)
{
return BadRequest();
}
}
Run Code Online (Sandbox Code Playgroud)
我想只要简单地附加这个Where条款就可以了。该代码执行正确的代码路径,但它仍然返回所有结果。
您可以在此处定义基本查询:
var taskQuery = (from t in _context.Tasks select t);
Run Code Online (Sandbox Code Playgroud)
稍后,您.Where(...)对查询调用扩展方法以进一步过滤查询:
case "completed":
taskQuery.Where(t => t.IsCompleted == true);
break;
Run Code Online (Sandbox Code Playgroud)
但是,.Where(...)不会替换IQueryable,而是返回一个新的 IQueryable。正如您在评论中指出的,您需要将查询替换为新查询,以便您的调用.ToList()稍后返回预期结果。
像这样:
taskQuery = taskQuery.Where(t => t.IsCompleted == true);
Run Code Online (Sandbox Code Playgroud)
这是实体框架中“构建”查询的一种非常常见的模式,因此您绝对走在正确的轨道上!
| 归档时间: |
|
| 查看次数: |
3006 次 |
| 最近记录: |