Linq to EF с Sqlite - не удается найти строку (string.contains) - PullRequest
0 голосов
/ 30 марта 2011

Я создаю настольное приложение winforms, а база данных приложения - Sqlite. Я использую Linq для сущностей с Sqlite ADO.NET провайдером .

В моем приложении мне нужно искать строку внутри текстового столбца. Пример (IsNotEmpty - это мой метод расширения для! String.IsNullOrEmpty (str)):

        if (param.FirstName.IsNotEmpty())
        {
            selectedCustomers = selectedCustomers.Where(c => (c.firstName.Contains(param.FirstName)));
        }
        if (param.LastName.IsNotEmpty())
        {
            selectedCustomers = selectedCustomers.Where(c => c.lastName.Contains(param.LastName));
        }

Проблема в том, что этот запрос переводится в функцию CHARINDEX SQL, а Sqlite его не поддерживает.

Когда я переключаюсь на функцию IndexOf (строка) (, как предлагается здесь ), запрос переводится также в CHARINDEX.

Когда я переключаюсь на IndexOf (строка, индекс), я получаю следующую ошибку:

LINQ to Entities не распознает метод метода Int32 IndexOf (System.String, Int32), и этот метод нельзя преобразовать в выражение хранилища.

Есть идеи? Стоит ли переходить на Access?

1 Ответ

1 голос
/ 25 ноября 2011

Вы не можете использовать функции .NET в LINQ to Entities из-за безопасности, например IndexOf() может сделать много других вещей, кроме проверки строки.

Вместо этого используйте Entity SQL http://msdn.microsoft.com/en-us/library/bb738683.aspx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...