Nous avons une classe appelée Tâche:Passage func comme paramètre dans LINQ aux entités et « .NET Framework interne Erreur de fournisseur de données 1025 » erreur
public partial class Task : EntityObject
{
public EntityCollection<TaskUser> TaskUsers { get {...} set{...} }
}
Il a la propriété de navigation appelé TaskUsers, qui contient les utilisateurs attachés à cette par défaut:
public partial class TaskUser : EntityObject
{
public User User { get {...} set { } }
}
Chaque objet TaskUser possède un objet Utilisateur.
IQueryable<Task> tasks
. Nous voulons trouver les tâches assignées à l'utilisateur avec ID = 1. Lorsque nous utilisons
tasks.Where(t => t.TaskUsers.Any(a => a.User.ID == 1))
tout fonctionne bien. Lorsque nous utilisons
Func<TaskUser, bool> function = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.Any(function));
nous obtenons belle erreur 'Internal .NET Framework Data Provider error 1025'
. Pourquoi? Je veux construire des filtres beaucoup plus compliqués en utilisant la classe Expression
, mais si je ne peux pas passer le simple Func
, cela ne peut pas être fait. Que devrais-je faire?
EDIT
Peut-être
Func<TaskUser, bool> function = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.Any(function));
ne fonctionne pas, mais
Expression<Func<TaskUser, bool>> expression = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.AsQueryable().Any(expression));
œuvres! C'est tout ce dont j'avais besoin.
Heh, je viens de publier une prime sur une [question similaire] (http://stackoverflow.com/questions/11990158/internal- net-framework-data-provider-error-1025), avant de trouver votre solution ici. Tu veux aller chercher la prime? –
En fait, ayant essayé d'utiliser 'Expression' plutôt que' Func', comme vous l'avez fait, le mien n'a pas fonctionné. D'autres idées? –