utilidad net epass datos conexion conector entity-framework linq-to-entities lambda

entity-framework - epass - conexion a base de datos ado net c#



Paso de func como parĂ¡metro en Linq a Entidades y error ''1025'' del proveedor de datos de.NET Framework interno (1)

Tenemos una clase llamada Tarea:

public partial class Task : EntityObject { public EntityCollection<TaskUser> TaskUsers { get {...} set{...} } }

Tiene una propiedad de navegación llamada TaskUsers, que contiene usuarios adjuntos a este taks:

public partial class TaskUser : EntityObject { public User User { get {...} set { } } }

Cada objeto TaskUser tiene un objeto User.

Nos IQueryable<Task> tasks . Queremos encontrar tareas asignadas al usuario con ID = 1. Cuando usamos

tasks.Where(t => t.TaskUsers.Any(a => a.User.ID == 1))

todo funciona bien Cuando usamos

Func<TaskUser, bool> function = a => a.User.ID == 1; return tasks.Where(t => t.TaskUsers.Any(function));

obtenemos un ''Internal .NET Framework Data Provider error 1025'' agradable ''Internal .NET Framework Data Provider error 1025'' . ¿Por qué? Quiero crear filtros mucho más complicados usando Expression clase Expression , pero si no puedo pasar Func simple, esto no se puede hacer. ¿Qué tengo que hacer?

EDITAR

Tal vez

Func<TaskUser, bool> function = a => a.User.ID == 1; return tasks.Where(t => t.TaskUsers.Any(function));

no funciona, pero

Expression<Func<TaskUser, bool>> expression = a => a.User.ID == 1; return tasks.Where(t => t.TaskUsers.AsQueryable().Any(expression));

¡trabajos! Eso es todo lo que necesitaba.


Bueno, el EF solo puede traducir expresiones, no funciones.

es decir, puede traducir esto:

Expression<Func<TaskUser,bool>>

pero no esto:

Func<TaskUser,bool>

En cuanto a cómo combinar expresiones (en pseudo código):

Expression<Func<TaskUser, bool>> expression = a => a.User.ID == 1; return tasks.Where(t => t.TaskUsers.Any(expression));

Probablemente hay algunos gurús de Expresión que pueden ayudar con eso.

Sugiero una pregunta de seguimiento centrada en ese problema particular

Alex