我的程序中有以下兩行代碼。目標是從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