使用LINQ从可空int字段中选择Max

时间:2015-08-05 12:36:00

标签: mysql linq int nullable

我试图用LINQ在MYSQL数据库中找到最大的ordernumber(int?):

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

但它说:不能隐式转换类型' int?' to' int'。你错过了演员吗?

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

3 个答案:

答案 0 :(得分:2)

你非常接近,应该这样做:

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

答案 1 :(得分:0)

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

但是你要分配给int并且你不能在没有做任何事情的情况下为T分配一个可空的-T。

通常使用null-coalescing运算符:

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

或者您可以分配给int?并在其他地方处理null案例。如果您知道将始终至少找到一个非空值,则null-coalescing选项最简单。

答案 2 :(得分:0)

  

无法隐式转换类型&#39; int?&#39;到&#39; int&#39;

是的,这是由Nullable字段引起的。 在r.OrderNumber解决问题后放置一个.value! 唯一的问题是.value是空的,但你已经检查了它。

所以这是你的代码:

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