2

私は非常に多く使用したLINQを1つ持っています。この LINQ を次のように返すメソッドを作成してみます。

    public static System.Linq.Expressions.Expression<Func<MyEntity, bool>> GetFilteredEntity() {
        return x => true/*Some condition*/;
    }

    public static Func<MyEntity, bool> GetFilteredEntity() {
        return x => true/*Some condition*/;
    }

そして、これを次のように使用します

    db.MyEntities.Where(GetFilteredEntity());

成功していますが!私はそれを次のように使用する必要があります

    db.ParentEntities.Where(entity => entity.MyEntities.Where(GetFilteredEntity()));

このコードもコンパイルされましたが、使用するたびにエラーが発生しました:

System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.

、平:

db.ParentEntities.Where(entity => entity.MyEntities.Where(GetFilteredEntity())).ToList();

この例外もスローします。

しかし、

db.ParentEntities.Where(entity => entity.MyEntities.Where(x => true/*Some condition*/))

まだ正常に動作します!では、なぜそれが起こったのか、これを回避する方法はありますか?

最終的な作業コード

public static Expression<Func<MyEntity, bool>> GetFilteredEntity() { return x => true/*Some condition*/; }

var expression = GetFilteredEntity();

db.ParentEntities.Where(entity => entity.MyEntities.AsQueryable().Where(expression ));

また、 Passing func as parameter in Linq to Entities と 'Internal .NET Framework Data Provider error 1025' エラーに.AsQueryable()感謝します

4

2 に答える 2

-1

LazyLoading が原因のようです。パラメータで ToList() をポップしようとしましたか?

db.ParentEntities.Where(entity => entity.MyEntities.Where(GetFilteredEntity()).ToList());
于 2013-10-07T16:00:29.347 に答える