2012-08-23 9 views
7

Estoy tratando de cargar las propiedades de una clase derivada en un modelo de Entity Framework.Cómo usar Include() después de OfType()?

leí all overtheplace que tengo para filtrar primero el set con OfType() antes de incluir propiedades con include():

var persons = Context.Persons 
        .OfType<Employee>() 
        .Include("Compensation") 

No sé cómo conseguir que include() para trabajar aunque, en mi caso, Persons es un DbSet, OfType() devuelve un IQueryable y IQueryable no define un método Include().

+0

Espero que este enlace ayude http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/2130796d-a2fe-4137-af18-d56480748384 – Boomer

Respuesta

15

Lugar esto:

using System.Data.Entity; 

en su lista de usar, y después de que usted será capaz de utilizar Include extensión de los métodos de la familia de DbExtensions clase:

public static IQueryable<T> Include<T, TProperty>(this IQueryable<T> source, Expression<Func<T, TProperty>> path) where T : class; 
    public static IQueryable<T> Include<T>(this IQueryable<T> source, string path) where T : class; 
    public static IQueryable Include(this IQueryable source, string path); 

Aceptan IQueryable como primer argumento , y también hay tipos fuertemente tipados, que es mejor, luego Include(String).

+2

¡Ah! Gracias, pensé que probablemente era un método de extensión. Realmente me gustaría que VS hiciera el espacio de nombres reconocible y/o que la gente incluyera los usos en sus muestras :) –

+0

@XavierPoinas: estoy completamente de acuerdo contigo, esto también me confundió la primera vez. – Dennis

+0

@XavierPoinas He sido convertido a Resharper por esta (entre otras) razones. Resharper sugerirá métodos de extensión para llenar este vacío faltante en las sugerencias de Visual Studios en intellisense. ¡Totalmente de acuerdo contigo! –