Abbiamo una classe chiamata Task:Passando func come parametro in LINQ to Entities e 'interno di dati .NET Framework errore Provider 1025' errore
public partial class Task : EntityObject
{
public EntityCollection<TaskUser> TaskUsers { get {...} set{...} }
}
E 'chiamato proprietà di navigazione TaskUsers, che contiene gli utenti allegato al presente taks:
public partial class TaskUser : EntityObject
{
public User User { get {...} set { } }
}
Ogni oggetto TaskUser ha oggetto Utente.
Ci viene dato IQueryable<Task> tasks
. Vogliamo trovare compiti assegnati all'utente con ID = 1. Quando usiamo
tasks.Where(t => t.TaskUsers.Any(a => a.User.ID == 1))
tutto funziona bene. Quando usiamo
Func<TaskUser, bool> function = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.Any(function));
otteniamo bello errore 'Internal .NET Framework Data Provider error 1025'
. Perché? Voglio costruire filtri molto più complicati usando la classe Expression
, ma se non riesco a passare il semplice Func
, questo non può essere fatto. Cosa dovrei fare?
EDIT
Forse
Func<TaskUser, bool> function = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.Any(function));
non funziona, ma
Expression<Func<TaskUser, bool>> expression = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.AsQueryable().Any(expression));
opere! Questo è tutto ciò di cui avevo bisogno.
Eh, ho appena postato una taglia su un [domanda simile] (http://stackoverflow.com/questions/11990158/internal- net-framework-data-provider-error-1025), prima di trovare la soluzione qui. Vuoi prendere la taglia? –
In realtà, dopo aver provato a usare 'Expression' piuttosto che' Func', come hai fatto tu, il mio ** non ha funzionato. Altre idee? –