Я хотел бы создать функцию, которая создает некоторые Linq для SQL, которые я могу позже добавить в существующий IQueryable. Для моих примеров я использую человека (T) с правильной фамилией.
Я хотел бы выполнить sh что-то вроде этого:
var surnameFilter = GetSurnameFilter(surname);
var finalQuery = _context.Persons.Concat(filterQuery);
var persons = finalQuery.ToList();
private IQueryable<Person> GetSurnameFilter(string surname)
{
// Create empty IQueryable<Person>
IQueryable<Person> query = Enumerable.Empty<Person>().AsQueryable();
return query.Where(k => k.Surname.Contains(surname));
}
Но тогда я получаю следующую ошибку:
System.InvalidOperationException: «Не удалось обработать выражение LINQ». Это может указывать либо на ошибку, либо на ограничение в EF Core. См. https://go.microsoft.com/fwlink/?linkid=2101433 для получения более подробной информации. '
Мне бы хотелось, чтобы я мог выбрать, какой фильтр добавить позже. Я знаю, это просто мелочь, но я предпочитаю сопоставить фильтр-запрос с основным запросом для удобства чтения и простоты использования. После некоторой отладки я отправил его на каст при создании пустого IQueryable<Person>
. Я заставил это работать, когда я делаю это, но это не то, что я хочу:
var finalQuery = AddFilter(_context.Persons, surnameFilter);
var persons= finalQuery.ToList();
private IQueryable<Person> AddFilter(IQueryable<Person> query, string surname)
{
return query.Where(k => k.Surname.Contains(surname));
}