C#Lambda表达式转换奇怪,任何建议?

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); 
} 

这是我的代码,我想表达默认添加到我的生意。 注意:属性EnableMarkDeleteMarknullable<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),有什么建议吗?


我试图将财产EnableMarkDeleteMark更改为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); 
} 
+1

是'var var param = query.ToJObject()'相关的问题?如果没有,你可以删除它们吗? –

+0

请取消注释或删除任何不应被视为的代码。 – ChiefTwoPencils

我想不通为什么lambda表达式给我转换(1)和转换(0)

当你注意,DeleteMark和EnableMark可为空整数。 C#没有定义int和可为空的整数之间的比较运算符。它确实定义了两个可为空的整数之间的比较运算符,以及从int到可空int的转换。 lambda转换捕获整数1和0已被转换为可空整数以进行比较的事实。

+0

感谢您的回答,但是如何改进它,在很多情况下可以使用空类型,在翻译之前不能直接转换它吗? – Leo