次のスニペットは、私が欲しいものを示しています:
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
);
}
しかし今、私はエラーが発生します:
値を null にすることはできません。パラメータ名:キー