2

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)

4

1 に答える 1