Проблема в том, что при использовании IQueryable
провайдер пытается преобразовать все выражения LINQ во что-то, что он может отправить в базу данных. Он не может знать, что делать с ToString("s")
, поэтому выдается исключение NotSupported
.
Если вы добавите .AsEnumerable()
перед вызовом Select
, это должно сработать. Разница в том, что объект Person
будет полностью занесен в память, затем будет запущен метод проекции (Select), и все это будет сделано как скомпилированный метод .NET, а не как SQL. Таким образом, все, что после AsEnumerable()
будет выполнено в памяти, а не в базе данных, поэтому обычно делать это не рекомендуется, пока вы не урежете количество строк настолько, насколько это возможно (т.е. после Where
и OrderBy
s).