LINQ 式の Func デリゲートに問題があります。これは、メソッドの問題のある部分です (repository.Items is IQueryable<T>)
:
public static ActionResult XXX<T>(IRepository<T> repository,
Func<T, int> keyExtractor, int id = 0)
{
if (id == 0) return ...
T item = repository.Items.Where(x => keyExtractor(x) == id).
FirstOrDefault();
if (item == null) return ...
try {
repository.DeleteItem(item);
return ...
} catch (Exception e) {
return ...
}
}
しかし、メソッドを実行すると、ノードのタイプが LINQ エンティティでサポートされていないなどのエラーが発生します。predikate を使用したバージョンも試しましたが、まったく運がありませんでした。
それを修正する方法はありますか?
1つの可能な方法を見つけます。LINQ は遅延実行を実行するため、最初に次のように実行を強制する必要があります。
T item = repository.Items.AsEnumerable().Where(x => keyExtractor(x) == id)