我的程序中有以下两行代码。目标是从Value字段返回最高数字。无法为空Linq.Table.Max()指定可为空的<Int64>?
MyDataContext context = new MyDataContext();
long? id = (long?)context.MyTable.Max(x => x.Value);
值字段是表中的bigint字段。该表也不能保证它包含行,事实上,它是我现在正在测试的场景。我试图在MyTable没有行时运行这个。
第二行返回无效操作异常。
无法将null值分配给类型为System.Int64的成员,该成员属于非空值类型。
我试过几种不同的方法,但我无法得到这个工作。我明显不理解C#中可空类型的重要内容。
EDIT(解决方案):
感谢Chris的答案,我能找到我的问题和解决方案的真正原因。事实证明,Value字段不是空值,而是因为lambda表达式中的x是空行。所以我在lambda中添加了一个检查来查看x是否为null,如果不是,那么我可以安全地检查Value是否为null。
MyDataContext context = new MyDataContext();
long? id = context.MyTable.Max(x => x == null ? (long?)0 : (long?)x.Value);
我对这个答案略微感到惊讶,因为错误意味着它有一个值,但它是空的。如果在x为null时试图执行x.Value,我会期望一个空引用异常。但是,看起来你现在有一个很好的答案。如果你自己想出一个解决方案,最好的做法是将解决方案做成答案(而不是编辑),并将其标记为正确的答案。这样,问题就得到了一个与问题本身分离的被接受的答案。 – Chris
我不会自己回答这个问题,但我没有必要的声望来做这件事。 – LamdaComplex