Я бы использовал что-то вроде следующего.
context.Table.Max(row => (Int32?)row.Id) ?? 0
И, кстати, я думаю, что ваше второе предложение гораздо яснее о цели, чем первое.
UPDATE
Я только что проверил запрос с помощью LINQPad. Если LINQPad заставит запрос работать, а в коде его нет, ваше второе предложение, вероятно, будет лучшим решением.
context.Table
.Select(row => row.Id)
.OrderByDescending(id => id)
.FirstOrDefault()
Недостатком является то, что значение по умолчанию установлено на ноль. Это можно изменить с помощью следующего запроса.
context.Table
.Select(row => (Int32?)row.Id)
.OrderByDescending(id => id)
.FirstOrDefault() ?? 0
И просто отметим, что следующее не работает, поскольку LastOrDefault()
не поддерживается LINQ to SQL.
context.Table
.Select(row => row.Id)
.OrderBy(id => id)
.LastOrDefault()