У нас есть класс с именем Task:
public partial class Task : EntityObject
{
public EntityCollection<TaskUser> TaskUsers { get {...} set{...} }
}
У него есть свойство навигации, называемое TaskUsers, которое содержит пользователей, прикрепленных к этому taks:
public partial class TaskUser : EntityObject
{
public User User { get {...} set { } }
}
Каждый объект TaskUser имеет объект User.
Нам дано IQueryable<Task> tasks
. Мы хотим найти задачи, назначенные пользователю с ID = 1. Когда мы используем
tasks.Where(t => t.TaskUsers.Any(a => a.User.ID == 1))
все отлично работает. Когда мы используем
Func<TaskUser, bool> function = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.Any(function));
мы получаем хорошую 'Internal .NET Framework Data Provider error 1025'
ошибку. Зачем? Я хочу построить намного более сложные фильтры, используя класс Expression
, но если я не могу передать простой Func
, это невозможно сделать. Что мне делать?
EDIT
Может быть
Func<TaskUser, bool> function = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.Any(function));
не работает, но
Expression<Func<TaskUser, bool>> expression = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.AsQueryable().Any(expression));
работает! Это все, что мне нужно.