我有1個LINQ使用這麼多。我試圖創造出返回此LINQ類似方法:經常使用的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));
而且.AsQueryable()
感謝Passing func as parameter in Linq to Entities and 'Internal .NET Framework Data Provider error 1025' error
無關的問題:這個應該做什麼? 'db.ParentEntities.Where(entity => entity.MyEntities。Where(GetFilteredEntity()));''ParentEntity'是否來自'MyEntity'? – Khan
Nope =)它只是採取'ParentEntity'過濾計數'MyEntity'大於...(也是它的問題和解答) –