Следующий фрагмент показывает, что я хочу:
public static class DblinqExtension
{
public static int MaxId<T>(this DbLinq.Data.Linq.Table<T> table) where T : class
{
var val = table.OrderByDescending(x => "Id").FirstOrDefault();
return Convert.ToInt32(val);
}
}
С DbMetal я сгенерировал классы отображения.У каждой таблицы есть идентификатор столбца (который, очевидно, является целым числом), и я хочу знать МАКС-идентификатор.
Кто-нибудь знает, как мне заставить мой фрагмент работать ??
Спасибо!
Я нашел эту статью: OrderBy со строковым ключом-переключателем
С этим предложением мой код станет:
public static int MaxId<T>(this DbLinq.Data.Linq.Table<T> table) where T : class
{
var val = table.OrderByDescending(CreateSelectorExpression<T>("Id")).FirstOrDefault();
return Convert.ToInt32(val);
}
private static Expression<Func<T, Int32>> CreateSelectorExpression<T>(string propertyName) where T : class
{
var parameterExpression = Expression.Parameter(typeof(T));
return (Expression<Func<T, Int32>>)Expression.Lambda(
Expression.PropertyOrField(parameterExpression, propertyName),
parameterExpression
);
}
НО теперь я получаю сообщение об ошибке:
Значение не может быть нулевым.Имя параметра: ключ