Страницы

Поиск по вопросам

пятница, 19 октября 2018 г.

AsEnumerable в Entity Framework

Здравствуйте уважаемые специалисты! Хочу задать вопрос по Entity Framework. Например у меня есть такой код return from city in context.City where SomeFunc(city, id, name) select new City(city);
bool SomeFunc(City city, int id, int name) { return city.Id == id || city.Name == name || city.Code == name; } когда я выполняю код то получаю такое исключение LINQ to Entities does not recognize the method and this method cannot be translated into a store expression В интернете советуют использовать метод AsEnumerable return from city in context.City.AsEnumerable() where SomeFunc(city, id, name) select new City(city); Это работает но очень медленно потому что context.City.AsEnumerable() выдает мне сразу все города из таблицы и потом выполняет к ним функцию SomeFunc Можно написать так: return from city in context.City where city.Id == id || city.Name == name || city.Code == name select new City(city); и все будет работать быстро. Но тогда получится такая проблема - это условие может быть использовано еще в каком-то методе и тогда надо будет дублировать этот код что не есть хорошо. Как быть? Может быть в Entity Framework есть какой то способ избежать и дублирования кода и выполнения условий в SQL а не в C#? Заранее спасибо!


Ответ

Попробуйте перейти от Func к Expression: Expression> SomeFunc(int id, string name) { return city => city.Id == id || city.Name == name || city.Code == name; }
var result = cities.Where(SomeFunc(id, name)).Select(city => new City(city));

Комментариев нет:

Отправить комментарий