使用 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);
我正在尝试使用 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);