VB.net找不到字符串

时间:2009-07-17 21:43:14

标签: vb.net subsonic

使用VB.net,以下代码段会给出以下错误。

Dim _account = Account.Find(Function(x As Account) x.AccountName = txtFilterAccountName.Text)

或类似的,如果我做

.SingleOrDefault (Function(x As Account) x.AccountName = txtFilterAccountName.Text)

都会给出错误“不支持方法'CompareString'”。如果我进行相同的调用搜索整数(ID字段),它工作正常。

.SingleOrDefault (Function(x As Account) x.Id = 12)

所以整数匹配很好但字符串不起作用这是VB.net模板的问题吗?

3 个答案:

答案 0 :(得分:1)

这不是Vb.Net模板的问题。

问题是您没有使用普通的LINQ提供程序。基于你的标签(亚音速),我猜你正在使用LINQ to SQL查询。

问题在于,我们试图将您的代码转换为表达式树,然后将其转换为类似SQL的查询。您的项目设置正在将您的字符串比较转换为VB运行时中的调用。具体来说,Microsoft.VisualBasic.CompilerServices.Operators.CompareString。

有问题的LINQ2SQL生成器或VB编译器(不记得在我的脑海中完成此检查的地方)并不了解如何将其转换为等效的SQL。因此它会产生错误。您需要使用LINQ2SQL支持的字符串比较函数。

编辑更新

看起来Linq2SQL案例中应该支持CompareString运算符。亚音速是否有不同的提供者不支持这种翻译?

答案 1 :(得分:1)

问题在于SubSonic3的SQL生成器和从VB.NET生成的表达式树。

VB.NET生成一个不同的表达式树,如JaredPar所述,而SubSonic3没有考虑它 - 请参阅Issue 66

我已将修复程序实现为described,但它尚未合并到SubSonic3的主分支中。

答案 2 :(得分:0)

BlackMael的修复已经提交:

http://github.com/subsonic/SubSonic-3.0/commit/d25c8a730a9971656e6d3c3d17ce9ca393655f50

解决方案解决了我的问题,类似于John Granade的问题。

感谢所有参与者。