我对这个subsonic3.0.0.4 find语句有疑问:
rep = new SimpleRepository(" ... ");
rep.Find<MyObject>( x => x.Code.ToString("00000").Contains("023") );
代码字段是Long值,我需要的sql查询是:
* SELECT * FROM ... WHERE convert(varchar,Code)LIKE'%023%'*
当我执行它时,NullReferenceException。然后问题是LIKE过滤器的Cast to string。但我不知道如何解决它。
堆栈跟踪: 在SubSonic.SqlGeneration.ANSISqlGenerator.GenerateConstraints() 在SubSonic.SqlGeneration.ANSISqlGenerator.BuildSelectStatement() 在SubSonic.Query.SqlQuery.BuildSqlStatement() 在SubSonic.Query.SqlQuery.GetCommand() 在SubSonic.Query.SqlQuery.ExecuteTypedListT 在SubSonic.Repository.SimpleRepository.Find [T](表达式`1表达式) at agf.FormMain.BindGrid()in C:\ dev \ localhost \ AGF \ trunk \ AGF \ FormMain.cs:line 351
谢谢!
答案 0 :(得分:0)
这是一个“bug” - SubSonic尝试将where子句中的表达式转换为SQL语句。 SubSonic最好将x.Code语句转换为字符串,但不知道 - 并且不能保证多种数据库类型 - 你的toString(“00000”)将成功执行。
例外可能会更清楚。
尝试将“Contains”语句中的值转换为类似“00023”的值,并省略ToString中的格式表达式 - 它应该是功能等效的并且可以正常工作。