包含强制转换的Subsonic SimpleRepository NullReferenceException

时间:2010-07-21 13:41:47

标签: c# linq subsonic

我对这个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

谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个“bug” - SubSonic尝试将where子句中的表达式转换为SQL语句。 SubSonic最好将x.Code语句转换为字符串,但不知道 - 并且不能保证多种数据库类型 - 你的toString(“00000”)将成功执行。

例外可能会更清楚。

尝试将“Contains”语句中的值转换为类似“00023”的值,并省略ToString中的格式表达式 - 它应该是功能等效的并且可以正常工作。