我从linq表达式生成一个十进制值的列表,我想要最小的非零值。但是,linq表达式很有可能会导致一个空列表。

这将引发异常,并且没有MinOrDefault可以应对这种情况。

decimal result = (from Item itm in itemList
                  where itm.Amount > 0
                  select itm.Amount).Min();

如果列表为空,将结果设置为0的最巧妙方法是什么?

最佳答案

decimal? result = (from Item itm in itemList
                  where itm.Amount != 0
                  select (decimal?)itm.Amount).Min();

注意转换为decimal?。如果不存在任何结果,那么您将得到一个空结果(在事实发生之后就进行处理-我主要是在说明如何停止异常)。我还使!=而不是>成为“非零”。

关于c# - 在Linq中实现 “MinOrDefault”的最捷径是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2165605/

10-10 12:44