私は非常に多く使用した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()
感謝します