以下代码段表明我想要什么:
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,我生成了映射类。我拥有的每个表都有列 ID(这显然是一个整数),我想知道 MAX id。
任何人都知道如何让我的代码片段正常工作吗?
谢谢!
我找到了这篇文章:OrderBy with a String keySelector
应用该建议后,我的代码将变为:
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
);
}
但现在我收到一个错误:
值不能为空。参数名称:key