使用 LINQ 从可为 null 的 int 字段中选择 Max

Selecting Max from a nullable int field with LINQ

我正在尝试使用 LINQ 在 MYSQL 数据库中找到最大的订单号(整数?):

 int maxOrdernumber = context.DataContext.Purchaseorders.Where(r=> (r.Ordernumber.HasValue)).Max(r=>r.Ordernumber);

但它说:无法将类型 'int?' 隐式转换为 'int'。您缺少演员表吗?

据我了解,表达式的第一部分仅将字段过滤为有价值的字段。

你非常接近,应该做到这一点:

int maxOrdernumber = context.DataContext.Purchaseorders.Where(r=> (r.Ordernumber.HasValue)).Max(r=>r.Ordernumber.Value);

Where 的结果将是 IEnumerable<int>>。因此 Max 的结果将是 int?.

但是你正在分配给一个 int 并且你不能在不做任何事情的情况下将可空的 of-T 分配给 T。

通常使用空合并运算符:

int res = some-expression-that-is-nullable ?? some-default;

或者您可以分配给 int? 并在别处处理 null 情况。如果您知道总会找到至少一个非空值,那么空合并选项是最简单的。

Cannot implicitly convert type 'int?' to 'int'

是的,这是由于 Nullable 字段。 在 r.OrderNumber 之后放置一个 .value 将解决您的问题! .value 的唯一问题是当它为空但您已经检查过它时。

这是您的代码:

int maxOrdernumber = context.DataContext.Purchaseorders.Where(r=> (r.Ordernumber.HasValue)).Max(r=>r.Ordernumber.Value);