【问题标题】:Linq expression that would always return true始终返回 true 的 Linq 表达式
【发布时间】:2011-03-31 12:31:13
【问题描述】:

我需要将参数传递给需要Expression<Func<T, bool>> 的方法。

如何传递始终返回 true 的表达式?

使用obj => true 不起作用,因为框架在运行时抱怨它无法根据 True 常量确定成员类型。

【问题讨论】:

  • 请提供一个完整的示例,并告诉我们您使用的是哪个提供商。
  • 我认为您的错误在其他地方。这样编译:new List<object>().AsQueryable().Where(p => true);Where的参数类型为Expression<Func<T, bool>>

标签: c# .net linq expression-trees


【解决方案1】:

如果你有这样的功能

void TakeExpression<T>(Expression<Func<T, bool>> expr)

你应该这样称呼它,指定 T 类型:

TakeExpression<int>(_ => true)

它应该可以工作。

【讨论】:

  • 是的,通常在 Linq 中它正在处理源对象,因此它可以从中获取其 类型。
  • 确实,源类型不能隐式确定,所以要显式传递。
【解决方案2】:

你需要定义你要传递的参数类型:

(object o) => true 

或者

(int a) => true 

【讨论】:

    【解决方案3】:

    我们可以得到如下结果。

    context 视为您的 DbContext 实例,将 Entity 视为您的实体类名称。

    context.Entity.Where(t=> t.EntityID == t.EntityID);
    

    通过这样做,where 子句将始终返回 true,并且将显示所有数据。

    【讨论】:

      【解决方案4】:

      这里有两个问题:

      1) 如果您传递的谓词总是希望返回 true,那么它就不是一个谓词。您可以省略您尝试拨打的任何电话。

      2) 如果你只想返回 true,你可以简单地使用更详细的 lambda 语法来得到你想要的:

      sample.AsQueryable().Where((x) => { return true; });
      

      更详细的语法允许您指定更接近匿名函数,同时仍然是一个表达式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多