如何在执行聚合操作之前检查查询结果?

时间:2011-06-21 02:00:59

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

我正在ASP.NET MVC 3上设计一个项目。

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

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

用户输入 p 的位置。

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

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

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

1 个答案:

答案 0 :(得分:6)

您收到错误,因为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);

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