【问题标题】:How to check for results in query before performing aggregate operation?如何在执行聚合操作之前检查查询结果?
【发布时间】:2011-09-19 03:51:31
【问题描述】:

我正在设计一个基于 ASP.NET MVC 3 的项目。

我在我的控制器中使用这个查询:

int batchSize = (int)db.ProductFormulation
         .Where(r => r.ProductID == p)
         .Min(r => r.Quantity);

p 由用户输入。

当我运行我的项目并且用户输入我的表中不存在的 p 值时,会发生错误。

我怎样才能停止这个错误,例如应该创建一个消息框,指出您输入的值不存在记录,并且我的项目应该连续运行。

请建议我该怎么做。提前致谢。

【问题讨论】:

    标签: asp.net-mvc linq asp.net-mvc-2 asp.net-mvc-3


    【解决方案1】:

    您收到错误是因为 Min 正在对没有元素的序列进行操作。

    您基本上是在寻找MinOrDefault(),它在 LINQ 框架中不存在。

    This answer 有一个很好的实现方法。

    或者,如果您不想在服务器端进行聚合操作,您可以先实现序列,然后执行 min:

    int batchSize = 0;
    var results = db.ProductFormulation.Where(r => r.ProductID == p).ToList();
    
    if (results.Count > 0)
       batchSize = results.Min(x => x.Quantity);
    

    显然,如果你有很多记录,上面的方法并不适合,你最好使用前面提到的扩展方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2019-12-27
      • 2021-08-17
      • 2014-10-22
      • 2018-12-11
      • 1970-01-01
      相关资源
      最近更新 更多