C# Lambda Expression 翻译的很奇怪,有什么建议吗?
C# Lambda Expression translated strange, Any Suggestions?
我对以下 lambda 表达式有疑问:
public IEnumerable<ModuleEntity> GetPageList(Pagination pagi, string query)
{
var expression = LinqExpression.Default<ModuleEntity>();
expression = expression.And(e =>
e.DeleteMark != 1 &&
e.EnableMark != 0
);
return this.BaseRepository().GetList(expression, pagi);
}
这是我的代码,我想为我的业务添加默认表达式。
注意:属性 EnableMark
和 DeleteMark
是 nullable<int>
。
当我调试时,lambda 表达式将表达式转换为:
{p => ((1 == 1) AndAlso ((p.DeleteMark != Convert(1)) AndAlso (p.EnableMark != Convert(0))))};
它导致我的查询抛出异常:
// use Dapper connection Query
var query = dbConnection.Query<T>(linq);
Exception: Unrecognized NodeType (Convert),
我不明白为什么 lambda 表达式会给出 Covnert(1)
和 Convert(0)
,有什么建议吗?
我尝试将 属性 EnableMark
和 DeleteMark
更改为 int
而不是 nullable<int>
,然后成功了。但在其他情况下, nullable type
是必要的,有没有解决方案或文档?
谢谢。
@Eric Lippert 感谢您指出原因,我设置了一个值为'1'的变量,让它的类型为int?
,并分配给DeleteMark。成功了!!
public IEnumerable<ModuleEntity> GetPageList(Pagination pagi, string query)
{
var expression = LinqExpression.Default<ModuleEntity>();
int? deleteMark = 1;
int? enableMark = 0
expression = expression.And(e =>
e.DeleteMark != deleteMark &&
e.EnableMark != enableMark
);
return this.BaseRepository().GetList(expression, pagi);
}
I can't figure out why the lambda expression gives me Convert(1) and Convert(0)
正如您所注意到的,DeleteMark 和 EnableMark 是可为空的整数。 C# 没有定义整数和可为空的整数之间的比较运算符。它确实定义了两个可为 null 的 int 之间的比较运算符,以及从 int 到 nullable int 的转换。 lambda 转换捕获了整数 1 和 0 已被转换为可为 null 的整数以便进行比较的事实。
我对以下 lambda 表达式有疑问:
public IEnumerable<ModuleEntity> GetPageList(Pagination pagi, string query)
{
var expression = LinqExpression.Default<ModuleEntity>();
expression = expression.And(e =>
e.DeleteMark != 1 &&
e.EnableMark != 0
);
return this.BaseRepository().GetList(expression, pagi);
}
这是我的代码,我想为我的业务添加默认表达式。
注意:属性 EnableMark
和 DeleteMark
是 nullable<int>
。
当我调试时,lambda 表达式将表达式转换为:
{p => ((1 == 1) AndAlso ((p.DeleteMark != Convert(1)) AndAlso (p.EnableMark != Convert(0))))};
它导致我的查询抛出异常:
// use Dapper connection Query
var query = dbConnection.Query<T>(linq);
Exception: Unrecognized NodeType (Convert),
我不明白为什么 lambda 表达式会给出 Covnert(1)
和 Convert(0)
,有什么建议吗?
我尝试将 属性 EnableMark
和 DeleteMark
更改为 int
而不是 nullable<int>
,然后成功了。但在其他情况下, nullable type
是必要的,有没有解决方案或文档?
谢谢。
@Eric Lippert 感谢您指出原因,我设置了一个值为'1'的变量,让它的类型为int?
,并分配给DeleteMark。成功了!!
public IEnumerable<ModuleEntity> GetPageList(Pagination pagi, string query)
{
var expression = LinqExpression.Default<ModuleEntity>();
int? deleteMark = 1;
int? enableMark = 0
expression = expression.And(e =>
e.DeleteMark != deleteMark &&
e.EnableMark != enableMark
);
return this.BaseRepository().GetList(expression, pagi);
}
I can't figure out why the lambda expression gives me Convert(1) and Convert(0)
正如您所注意到的,DeleteMark 和 EnableMark 是可为空的整数。 C# 没有定义整数和可为空的整数之间的比较运算符。它确实定义了两个可为 null 的 int 之间的比较运算符,以及从 int 到 nullable int 的转换。 lambda 转换捕获了整数 1 和 0 已被转换为可为 null 的整数以便进行比较的事实。