2015-12-20 2 views
0

У меня есть класс, как это:LINQ к Entities не распознает метод «Boolean ToBoolean

public class menu{ 
public string Permission{get;set;} 
} 

Значение Permission является Encripted. Мне нужны все записи, где Permission есть True. Для этого я использую этот запрос:

return 
_menuSettings.Where(row => Convert.ToBoolean(Utilities.Encryption.Decrypt(row.Permission,"key"))==true).ToList(); 

, но я получаю эту ошибку:

LINQ к Entities не распознает метод метод 'Boolean ToBoolean (System.String)', и этот метод не могут быть переведены в выражение хранилища.

Я искал в Google, но я не могу его решить.

благодаря

+2

'Convert.ToBoolean' не мог Не переводятся в T-SQL, Linq to Entities не может его распознать. Взгляните на этот вопрос: http://stackoverflow.com/questions/34061637/linq-to-entities-does-not-recognize-the-method-system-web-mvc-fileresult/34061692#34061692 –

ответ

1

То, о чем вы просите, не может быть достигнуто с помощью запроса db. Я боюсь, что вы застряли в памяти фильтрации (надеюсь, что ваши не слишком много записей), как этот

return 
_menuSettings.AsEnumerable().Where(... 

здесь AsEnumerable() переключит контекст из Linq to Entities в Linq to Objects

+0

ваше право, спасибо –

1

Не каждый метод конвертируются в SQL то будет суть этого сообщения.

В вашем случае вы можете сравнить со строкой "true".

_menuSettings.Where(row => Utilities.Encryption.Decrypt(row.Permission,"key").ToLower()=="true").ToList(); 

Как уже упоминалось, сообщение означает, что метод не конвертируется в SQL. Итак, не удивительно, что Utilities.Encryption.Decrypt также не поддерживается.

Затем продолжите с той же концепцией принятия вещей, которые не работают, из запроса.

Быстрый и грязный способ реализовать/проецировать данные (используйте фильтр ToList() или ToIEnumerable() перед фильтром с не поддерживаемым фильтром).

Это означает, что вы берете все со стола и фильтруете его на своем сервере вместо СУБД (SQL-сервера).

Нравится это. (Я бы разбить его на несколько строк для удобства чтения)

var projection = _menuSettings.ToList(); 
var result = projection.Where(row => Utilities.Encryption.Decrypt(row.Permission,"key").ToLower()=="true").ToList(); 

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

+1

И теперь он 'll get 'Utilities.Encryption.Decrypt' не поддерживается –

+0

Я получаю эту ошибку' LINQ to Entities' не распознает метод 'System.String Decrypt (System.String, System.String)', и этот метод не может быть переведен в выражение хранилища. ' –

Смежные вопросы