C#Lambda表达式转换奇怪,任何建议?
我有以下lambda表达式的问题:C#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);
例外:无法识别的节点类型(转换),
我想不通为什么lambda表达式给我Covnert(1)
和Convert(0)
,有什么建议吗?
我试图将财产EnableMark
和DeleteMark
更改为int
,而不是nullable<int>
,然后它的工作。但在其他情况下,nullable type
是必要的,有没有解决方案或文件? 谢谢。
@Eric利珀特感谢您指出的原因,我设置的值的变量“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);
}
我想不通为什么lambda表达式给我转换(1)和转换(0)
当你注意,DeleteMark和EnableMark可为空整数。 C#没有定义int和可为空的整数之间的比较运算符。它确实定义了两个可为空的整数之间的比较运算符,以及从int到可空int的转换。 lambda转换捕获整数1和0已被转换为可空整数以进行比较的事实。
感谢您的回答,但是如何改进它,在很多情况下可以使用空类型,在翻译之前不能直接转换它吗? – Leo
是'var var param = query.ToJObject()'相关的问题?如果没有,你可以删除它们吗? –
请取消注释或删除任何不应被视为的代码。 – ChiefTwoPencils