【问题标题】:What Type can I pass to a Where clause?我可以将什么类型传递给 Where 子句?
【发布时间】:2015-02-18 20:47:36
【问题描述】:

我想将表达式存储在变量中,然后将其传递给 linq 语句中的 Where 子句,但我似乎无法弄清楚我需要使用什么 Type。我想要达到的结果是:

var expression = x => x.UserId == 5;

var result = db.Table.Where(expression);

我知道存储在Table 中的实体的Type 在某处需要,但不知道在哪里。

【问题讨论】:

  • @DavidG:不完全是。 OP 可能在Queryable.Where(需要Expression<Func<TSource, bool>>)之后,而不是Enumerable.Where(需要Func<TSource, bool>)。
  • @Douglas 这就是为什么我说这是一个线索,而不是一个完整的答案!
  • 这是一个误导性的线索...Func<Foo, bool> f = x => x.UserId == 5; 也可以编译,但不会给出预期的结果。

标签: c# linq lambda


【解决方案1】:
Expression<Func<Foo, bool>> expression = x => x.UserId == 5;

(将Foo替换为Table中实体的实际类型当然...)

【讨论】:

  • @Tevis,其实没什么难的; Func&lt;Foo, bool&gt; 是一个函数,它接受 Foo 并返回 bool(IOW,一个“谓词”)。 Expression&lt;X&gt;,其中 X 是委托类型,表示 X 类型委托的抽象语法树。
  • 为什么投反对票?这个答案不正确吗?这不是帮助OP吗?仅仅因为它是一个基本问题的答案并不意味着它是一个糟糕的答案......
  • 所以Expression&lt;X&gt; 代表x =&gt; x 语法?
  • @Tevis, Expression&lt;X&gt; 是 lambda 代码的表示;这种表示可以被检查、分析、转换成其他东西(例如,在 Entlty Framework 或 Linq2SQL 的情况下的 SQL)等等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多