Почему не работают массивы в LINQ to entities

223
25 октября 2017, 03:08

Есть метод в контроллере, который фильтрует содержимое.

[HttpPost] 
public ActionResult Search (string[] jsonString)
{
    IQueryable <UploadedFile> res = Context.UploadedFiles;
    if (!string.IsNullOrEmpty(jsonString[0]))
    {
        res = res.Where(x => x.FileTitle.Contains(jsonString[0]));
    }
    return View("UploadFilesView", res.ToList());
}

В метод прилетает json строка, далее фильтруется и отдается во View. В коде выше метод возвращается 500 (Internal Server Error).

Если заменить строку

res = res.Where(x => x.FileTitle.Contains(jsonString[0]));

на

var buffer = jsonString[0];
res = res.Where(x => x.FileTitle.Contains(buffer));

то все работает. Подскажите, почему так?

Answer 1

На приведенном Вами скриншоте есть сообщение об ошибке, гласящее о том, что обращение по индексу не поддерживается в Linq to Entity. Связано это, думаю с тем, что ExpressionBuilder не знает, как перевести его в язык СУБД, которую Вы используете (да, важно не только то, что Вы используете EF, но и то, какой провайдер).

Таким образом, для решения проблемы Вам необходимо поместить нужную Вам строку в локальную переменную.

READ ALSO
Видимость контрола на форме C#

Видимость контрола на форме C#

Столкнулся с такой проблемойНа форме несколько вкладок в TabControl

272
Регулярное выражение C# подсчет

Регулярное выражение C# подсчет

Есть строкаВ этой строке есть ключевое слово, допустим, "switch"

258
XAML C# как сохранять и загружать данные dataSet dataGrid в файл

XAML C# как сохранять и загружать данные dataSet dataGrid в файл

Подскажите пожалуйста, как в XAML C# использовать таблицу в памяти без базы данных, сохранять из таблицы DataGrid данные в файл (допустим вtxt) и загружать...

284
Ожидать указания сервера C#

Ожидать указания сервера C#

Программа на C# запросит сделать сервер несколько задач, которые могут занять приличное времяЗадача будет поделена на этапы и когда сервер...

284