VB.net не может найти по строке - PullRequest
1 голос
/ 18 июля 2009

Используя VB.net, следующий фрагмент выдает ошибку ниже.

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

или аналогично, если я делаю

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

выдаст ошибку «Метод CompareString не поддерживается». Если я делаю тот же вызов в поисках целого числа (поле идентификатора), он работает нормально.

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

Так что целочисленное сопоставление хорошо, но строки не работают Это проблема с шаблонами VB.net?

Ответы [ 3 ]

1 голос
/ 21 июля 2009

Проблема связана с генератором SQL SubSonic3 и деревом выражений, созданным из VB.NET.

VB.NET генерирует другое дерево выражений, как отмечено JaredPar, и SubSonic3 не учитывает его - см. Выпуск 66 .

Я реализовал исправление как , описанное , но оно еще не слилось с основной веткой SubSonic3.

1 голос
/ 18 июля 2009

Нет, это не проблема с шаблонами Vb.Net.

Проблема в том, что вы не используете нормального поставщика LINQ. На основании вашего тега (дозвуковой) я предполагаю, что вы используете запрос LINQ to SQL.

Проблема состоит в том, что под капотом он пытается превратить ваш код в дерево выражений, которое затем переводится в SQL-подобный запрос. Настройки вашего проекта превращают сравнение строк в вызов во время выполнения VB. В частности, Microsoft.VisualBasic.CompilerServices.Operators.CompareString.

Рассматриваемый генератор LINQ2SQL или VB-компилятор (не могу вспомнить, где эта проверка выполняется в моей голове) не понимает, как перевести это в эквивалентный бит SQL. Следовательно это генерирует ошибку. Вам нужно использовать функцию сравнения строк, которая поддерживается LINQ2SQL.

РЕДАКТИРОВАТЬ Обновление

Похоже, что оператор CompareString должен поддерживаться в случае Linq2SQL. Есть ли у SubSonic другой провайдер, который не поддерживает этот перевод?

0 голосов
/ 27 августа 2009

Исправлено исправление BlackMael:

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

Исправление решило мою проблему, которая была похожа на проблему Джона Гранады выше.

Спасибо всем участникам.

...