LINQ to SQL для поиска значений, начинающихся с символов из другой таблицы - PullRequest
0 голосов
/ 05 сентября 2018

Я хотел бы получить список значений из таблицы SQL, где записи начинаются с префикса, определенного в другой таблице.

Этот пост дает точный ответ, но он предназначен для EF, а не для Linq to SQL. С SQL я получаю ошибку:

Поддерживаются только аргументы, которые могут быть оценены на клиенте метод String.Contains

Пример кода:

var lookupList = dc.LookupTable.Select(p => p.Prefix);
var q = dc.Personnel
          .Where(item => lookupList
          .Any(p => item.Surname.StartsWith(p))).Select(x => x.PersonID);

Это работает с EF. Да, я могу ToList () мои коллекции, но таблицы большие, и запрос становится очень медленным. Любые предложения о том, как заставить это работать, не перечисляя мои объекты?

1 Ответ

0 голосов
/ 05 сентября 2018

Эта часть: .Any(p => item.Surname.StartsWith(p)) выдает ошибку:

Для метода String.Contains поддерживаются только аргументы, которые можно оценить на клиенте.

Он сообщает вам, Contains метод не работает с данным параметром, который может быть оценен только на сервере. StartsWith в основном использует тот же механизм. Таким образом, вместо Contains или StartsWith вы должны использовать IndexOf, чтобы узнать, произошел ли содержащий параметр в начале или нет:

.Any(p => item.Surname.IndexOf(p) == 0)

По данным MSDN:

* * IndexOf тысячи двадцать-один (Т): * +1022 *

Индекс предмета, если он найден в списке; в противном случае -1. ​​

Этот ответ частично взят из здесь .

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