【问题标题】:Conditionally refine database query based on non null filters基于非空过滤器有条件地优化数据库查询
【发布时间】:2015-06-13 23:14:46
【问题描述】:

我的视图页面中有 15 列,例如参考名称、形状、颜色、重量、价格等

我正在获取所有这些数据以优化数据库,如果用户不选择形状,那么它不会使用形状来优化,无论用户选择什么进行优化,只有那些项目应该在查询中。

我获取数据的代码-

[HttpPost]
public ActionResult ParametricSearch(List<string> SourceId, List<string> ShapeId, int[] Weights, List<string> ColorId)
{
    ...some code is here....
}

我的问题是当用户不选择“形状”时,它为空,我不想在查询中添加它来优化,只有选择的项目应该在查询中。 我如何编写查询以使用这些字段优化所有数据库

【问题讨论】:

    标签: asp.net-mvc entity-framework


    【解决方案1】:

    您可以使用 LINQ to Entities 链接 Where 子句。大致如下:

    [HttpPost]
    public ActionResult ParametricSearch(List<string> SourceId, List<string> ShapeId, int[] Weights, List<string> ColorId)
    {
         var query = yourDataContext.YourEntityName;
    
         if (SourceId != null && SourceId.Count > 0)
         {
             query = query.Where(x => SourceId.Contains(x));
         }
    
         if (ShapeId!= null && ShapeId.Count > 0)
         {
             query = query.Where(x => ShapeId.Contains(x));
         }
    
         if (ColorId!= null && ColorId.Count > 0)
         {
             query = query.Where(x => ColorId.Contains(x));
         }
    
         var result = query.Take(50).ToList();
         return View(result);
    }
    

    【讨论】:

    • 我有 15-16 个字段,然后我必须检查 15-16 次它太长了。我可以在单个查询中编写它吗
    • @Satyawan,我看不到在单个查询中直接执行此操作的方法。
    • 我不想获取数据库中的所有记录,我只想获取通过查询优化的前 50 条记录
    • @Satyawan,这不是您最初问题的一部分。不过,我更新了我的答案。您可以使用Take 方法指定要从数据库中获取的记录数。
    • @Satyawan,如果答案解决了您的问题,请考虑将其标记为答案。
    猜你喜欢
    • 2017-03-03
    • 2014-08-25
    • 2023-03-23
    • 2011-07-11
    • 2014-12-10
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多