Wir haben eine Klasse namens Aufgabe:Passing func als Parameter in Linq to Entities und 'Interne .NET Framework Data Provider Fehler 1025' Fehler
public partial class Task : EntityObject
{
public EntityCollection<TaskUser> TaskUsers { get {...} set{...} }
}
Es hat Navigationseigenschaft genannt TaskUsers, die Benutzer dazu angebracht enthält taks:
public partial class TaskUser : EntityObject
{
public User User { get {...} set { } }
}
Jedes TaskUser-Objekt hat Benutzerobjekt.
Wir erhalten IQueryable<Task> tasks
. Wir wollen Aufgaben zu finden, die Benutzer mit ID = 1 zugeordnet sind. Wenn wir
tasks.Where(t => t.TaskUsers.Any(a => a.User.ID == 1))
verwenden, funktioniert alles gut. Wenn wir
Func<TaskUser, bool> function = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.Any(function));
verwenden bekommen wir schöne 'Internal .NET Framework Data Provider error 1025'
Fehler. Warum? Ich möchte viel kompliziertere Filter mit Expression
Klasse bauen, aber wenn ich nicht einfach Func
übergeben kann, kann dies nicht getan werden. Was soll ich machen?
EDIT
Vielleicht
Func<TaskUser, bool> function = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.Any(function));
nicht funktioniert, aber
Expression<Func<TaskUser, bool>> expression = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.AsQueryable().Any(expression));
funktioniert! Das ist alles was ich brauchte.
Heh konzentriert vorschlagen, ich habe gerade gebucht ein Kopfgeld auf einer [ähnlichen Frage] (http://stackoverflow.com/questions/11990158/internal- net-framework-data-provider-error-1025), bevor Sie hier Ihre Lösung finden. Willst du das Kopfgeld ergattern? –
Eigentlich, nachdem ich 'Expression' anstelle von' Func' versucht habe, wie du, meins hat ** nicht ** funktioniert. Irgendwelche anderen Ideen? –