Ваша максимальная функция пытается вернуть Int64.Перегрузка Max, которую вы используете, определяется здесь на MSDN .Вы увидите, что он принимает параметр Func<TSource, long> selector
.Это ваше лямбда-выражение, которое говорит, что вы дадите ему TSource, и он вернет long (т.е. Int64).Ваша функция делает, когда x.Value имеет значение null, возвращающее нулевое значение, которое, конечно, недопустимо для Int64.
В этом случае вы должны иметь возможность использовать что-то вроде:
x=> x.Value!=null?x.Value:Int64.Minvalue
Это означает, что если x имеет значение, оно возвращает его, а в противном случае возвращает минимально возможное значение, которое когда-либо будет максимальным, только если all равно нулю.
Я должен отрицать, чтоэтот код не проверен, но должен дать вам правильную идею.
отредактировано : я изначально предполагал, что это длинное значение, допускающее обнуление, но оказалось, что есть перегрузки, которые поддерживают это, поэтому я теперь предполагаючто x не имеет значения nullable long, просто выглядит немного как один, если вы щурились в правильном направлении.