Задать вопрос
@ccc35

Как написать LINQ запрос?

В базе данных есть поле Актёры. Имена и фамилии актёров записаны через запятую. Необходимо при запросе вылавливать все точные совпадения имен либо фамилий.

Есть три варианта
if (!string.IsNullOrEmpty(movieActors))
            {
                //1. movies = movies.Where(x => x.Actors.Contains(movieActors));
                //2. movies = movies.Where(x => arr.Contains(movieActors));
                //3. movies = movies.Where(x => x.Actors.Split(' ').Contains(movieActors));    
            }

Первый работает, но не хорошо. Выдает любое совпадение символов.
Во втором варианте в цикле перебирал все строки из базы и разделял имена и фамилии сохраняя в массиве arr. Запрос не работает.
Третий выдает ошибку - что-то с приведением типов.

Подскажите как написать запрос ?
  • Вопрос задан
  • 634 просмотра
Подписаться 1 Оценить Комментировать
Ответ пользователя MrDywar Pichugin К ответам на вопрос (4)
Плохо как то.
Сравнивать строки надо без учета регистра, что бы "Иван" был равен "ИВАН".

Строка получается в базе такого типа:
"Иванов Иван, Петров, Сидоров С., П.Д. Сергеев ... "

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

Сейчас проблема найти, потом проблема изменить фамилию, потом нужно будет добавить какие то данные, разбить их на группы и т.д.
Один актер может играть в нескольких фильмах, и сейчас хранится копиями в каждой сущности, легко будет изменить его имя, думаю что нет.
Нужна связь многие ко многим. И тогда вы сможете находить всех актеров по фильму, и все фильмы по актеру.

Ошибка возникает в методе ToList() потому что именно он и делает отложенный запрос, который выше в коде был только сконфигурирован но не выполнен.

Для быстрого решения проблемы здесь и сейчас есть решение на SA -> LINQ to Entities does not recognize the method 'Sy...
Ответ написан
Комментировать