Estoy utilizando Entity Framework 4.3.1 con un enfoque Code First. Además, estoy usando LinqKit para usar PredicateBuilder.Código Entity Framework Primer predicado 4.3/LINQKit para la tabla relacionada
Si tengo tablas de este modo:
ubicación, la zona horaria (Muchos: 1)
..y me gustaría tener algo así:
Expression<Func<TimeZone, bool>> pred = PredicateBuilder.True<TimeZone>();
pred = pred.And(tz => tz.TimeZoneCode == "EST");
List<Location> locations = context.Locations
.AsExpandable().Where(pred)
.Select(loc => loc).ToList();
esto no funciona, porque el predicado está diseñado para aceptar un TimeZone, pero el método Where() recibe una ubicación.
puedo reescribir el predicado como tal, pero yo no quiero, porque yo quiero tener una fábrica predicado que crea predicados para tipos específicos (no quiero utilizar las propiedades del navegador de esta manera):
Expression<Func<Location, bool>> pred = PredicateBuilder.True<Location>();
pred = pred.And(loc => loc.TimeZone.TimeZoneCode == "EST");
Qué sintaxis podría usar (si existe) para usar el predicado como construido en el primer ejemplo, donde toma una ZonaTiempo, en lugar de tener que tomar una Ubicación y recorrer el árbol a través de las propiedades de navegación (ya que menos reutilizable). Sería bueno si hubiera una manera de aprovechar el conocimiento que EF tiene sobre las propiedades de navegación en primer lugar, y ser capaz de usar un predicado con alcance del tipo de la propiedad de navegación.
gracias por la actualización! ¿Puede agregar información sobre si este predicado se aplica o no al servidor, a través de LINQ/LINQKit alimentando EF algo que puede traducir a SQL, o se aplica fuerza bruta internamente en EF en un conjunto de datos sin filtrar? –
@PittsburghDBA esto está dando como resultado una llamada a la base de datos a través de EF, traduciéndose a SQL. – Grinn
¡Gracias por este excelente seguimiento! –