- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 1 个用得太多的 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
最佳答案
在您的第一个示例中,函数被调用并翻译成表达式甚至在它被发送到查询提供程序之前。在接下来的两个示例中,函数调用嵌入到发送给查询提供程序的表达式中,而查询提供程序不知道如何处理该函数调用,因此它只是抛出一个异常。当您将实际表达式嵌入到另一个表达式中时,不会有函数调用来混淆查询提供程序。
至于解决方案,只需将函数调用提取到变量中即可。查询提供程序足够聪明,可以看到您使用了封闭变量,并将提取它的值。对于函数调用,它只是不确定是否应该对其进行评估或尝试将其转换为应该在数据库端完成的操作。尝试同时执行这两种操作只会让查询提供者和使用它的人感到非常困惑和难以使用。为了简化问题,在发送查询之前永远不会执行带有表达式的函数调用。至于封闭变量,没有其他方法可以对其进行处理,因此没有任何其他行为可以将其混淆。
var expression = GetFilteredEntity();
db.ParentEntities.Where(entity => entity.MyEntities.Where(expression ));
关于c# - 经常使用从方法返回的 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19229129/
当运行 scala.util.Random().nextInt(3) 81 次时,我看到如下结果(Java 开发人员,请参阅 edit 了解这之间的关系): 200010202002112102222
在使用 native 应用程序在混合模式 C++/CLI 中调试时,我遇到了进程挂起问题。这是无法忍受的,我的调试几乎 70% 都会发生这种情况,我需要一次又一次地重新启动该过程。 是否有任何修补程序
我不知道这是一个错误还是某种误用/错误配置。希望有人能帮忙。谢谢! 如果我更改模块或 list 目录中的文件,通常会导致错误,大部分是以下类型 无法找到节点上的类 在节点上找不到定义类 当 Puppe
我是一名优秀的程序员,十分优秀!