温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - How can I filter database results from a Form post?
asp.net-core-mvc c# linq

c# - 如何从表单发布中过滤数据库结果?

发布于 2020-03-27 16:11:34

我可以肯定的是,我缺乏理解导致我无法正常工作。

我目前有一个表单,该表单会将过滤参数发布回控制器,然后它将建立查询。我建立的当前查询不会接缝实际做任何事情。至少当这样分离时不是这样。

从我阅读的内容来看,类似的方法应该可以工作,但是从我的测试来看,它没有任何作用。

[HttpPost]
public async Task<IActionResult> FilterPost()
{
    var query = _context.Products;
    query = query.OrderBy(m => m.Unit.Name)
         .Include(m => m.Unit)
         .Include(m => m.Attribute);

    foreach (var request in Request.Form)
    {
         var AttributeValue = request.Value;
         var AttributeName = request.Key;
         query = query.Where(m => m.Attribute.Name == AttributeName)
                      .Where(m => m.Value >= int.Parse(AttributeValue));
    }

    return RedirectToAction("Index");
}

我对它进行的所有测试可能都非常刺眼。

我之前已经研究过使用ExpressionTrees和DynamicLINQ。他们的缝线很有趣,也许有点矫and过正,也许吗?我不知道。也许我的大脑太疲惫,看不到明显的答案...

对于解决方案的任何建议或对解决方案的提示,我将不胜感激。

查看更多

查看更多

提问者
Intekin
被浏览
26
Michał Turczyn 2020-01-31 17:55

另外,设置断点并检查其中的内容request此外,您基于request字段过滤数据,但是在每次循环迭代中,您过滤的结果越来越多,因此您必须仔细考虑这一点。

另外,当重定向到时Index,您不会传递任何数据,我认为您应该传递a的结果query,因此您可以在其中使用并显示它。因此,我将看看RedirectToAction诸如的重载RedirectToAction(String, Object)另外,您可以看一下View具有类似功能的方法RedirectToAction

话虽如此,您应该传递查询的结果,因此您需要获取查询的结果,例如,通过调用ToListmethod。