使用三元运算符分配表达式

时间:2015-08-13 10:55:09

标签: c# .net linq lambda

我试图理解为什么第一个没问题,

Expression<Func<Foo, bool>> filterExpression = null;
if (id.HasValue) filterExpression = w => w.Id == id.Value;

这个抱怨:

Expression<Func<Foo, bool>> filterExpression = id.HasValue ? w => w.Id == id.Value : null;

在第二个中,我收到错误&#34;无法解析符号&#39; Id&#39;&#34;。我不明白为什么&#34; w&#34;没有解决我的班级&#34; Foo&#34;在这种情况下,由于左侧的表达式定义包含此类信息。

感谢。

1 个答案:

答案 0 :(得分:2)

你的陈述有几个问题。

首先,符号w的类型为MerketNews,而不是Foo

其次,您无法使用(伪)语法

定义表达式
[ExpressionType] expr = [boolValue] ? [lambda] : null;

您必须使用

[ExpressionType] expr = [boolValue] ? [lambda] : ([ExpressionType])null;

在你的情况下:

Expression<Func<Foo, bool>> filterExpression = id.HasValue ? w => w.Id == id.Value : (Expression<Func<Foo, bool>>)null;