Здравствуйте уважаемые специалисты! Хочу задать вопрос по 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
var result = cities.Where(SomeFunc(id, name)).Select(city => new City(city));
Комментариев нет:
Отправить комментарий