我试图用LINQ在MYSQL数据库中找到最大的ordernumber(int?):
int maxOrdernumber = context.DataContext.Purchaseorders.Where(r=> (r.Ordernumber.HasValue)).Max(r=>r.Ordernumber);
但它说:不能隐式转换类型' int?' to' int'。你错过了演员吗?
根据我的理解,表达式的第一部分仅将字段过滤为具有值的字段。
答案 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);