LINQ to SQL: IQueryable - строка содержит - метод не поддерживает перевод в SQL - PullRequest
3 голосов
/ 07 ноября 2011

Уважаемые эксперты LINQ или linq2sql, вы можете помочь мне разобраться в этом деле?

У меня есть класс Book, у каждой книги есть список, и я хочу найти книги, фамилии авторов которых в списке авторов содержат определенную строку searchAuthor, как показано ниже:

string searchAuthor = "foo";
IQUeryable books = BookStaticRepository.SelectAll();

books.Where(r => r.Authors.Any(x => searchAuthor.Contains(x.lastname, StringComparison.OrdinalIgnoreCase)));

Что я получаю при этой ошибке:

Метод 'Boolean Contains (System.String, System.String, System.StringComparison)' не поддерживает перевод в SQL.

Я уже пробовал то же самое, но с использованием IEnumerable, и он работал . Мне пришлось переключиться на IQueryable из-за проблем с производительностью ... Мне нужно, чтобы он работал с IQueryable.

Спасибо за вашу помощь.

Ответы [ 2 ]

4 голосов
/ 07 ноября 2011

Эта конкретная перегрузка Contains не работает, но игнорирование StringComparison приведет к ее преобразованию в SQL, что приведет к LIKE %SearchInput%. Это будет без учета регистра по умолчанию, если только ваша БД не настроена с учетом регистра.

Вот так:

string searchAuthor = "foo";
IQUeryable books = BookStaticRepository.SelectAll();

books.Where(r => r.Authors.Any(x => searchAuthor.Contains(x.lastname)));
2 голосов
/ 08 ноября 2011

Привет, ребята, спасибо, я нашел решение сам:

books.Where(r => r.Authors.Any(x => x.lastname.Contains(searchAuthor)));

Ошибка, я думаю, заключалась в том, что я выполнял своего рода «противоположную работу»: я говорил, что «фамилия должна содержать строку searchAuthor», а не наоборот (последнее имя должно содержать строку SearchAuthor .. ... который теперь дает мне ожидаемые результаты).

Самое смешное, что тот же самый запрос, который я разместил в своем первоначальном вопросе, работал нормально с использованием IEnumerable.

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