¿Puedo hacer que mis objetos EF recuperen solo columnas específicas en el sql ejecutado? Si estoy ejecutando el siguiente código para recuperar objetos, ¿hay algo que pueda hacer para obtener solo ciertas columnas si lo quisiera?Solo obtenga columnas específicas
public IEnumerable<T> GetBy(Expression<Func<T, bool>> exp)
{
return _ctx.CreateQuery<T>(typeof(T).Name).Where<T>(exp);
}
Esto generaría una cláusula de selección que contiene todas las columnas. Pero, si tengo una columna que contiene una gran cantidad de datos que realmente ralentiza la consulta, ¿cómo puedo hacer que mis objetos excluyan esa columna del sql generado?
Si mi mesa ha Id (int), Estado (int), datos (BLOB), ¿cómo puedo hacer que mi consulta sea
select Id, Status from TableName
en lugar de
select Id, Status, Data from TableName
De la sugerencia de abajo , mi método es
public IEnumerable<T> GetBy(Expression<Func<T, bool>> exp, Expression<Func<T, T>> columns)
{
return Table.Where<T>(exp).Select<T, T>(columns);
}
Y lo estoy llamando al igual que
mgr.GetBy(f => f.Id < 10000, n => new {n.Id, n.Status});
Sin embargo, estoy recibiendo un error de compilación:
Cannot implicitly convert type 'AnonymousType#1' to 'Entities.BatchRequest'
Quiero hacer esto de forma genérica para poder simplemente agregar otro argumento a la llamada al método GetBy que son las columnas que deben devolverse. – Brian
Debe pasar una expresión de selección junto con su expresión where, entonces, es decir: var foo = GetBy (r => r.Id == algunaId, r => nueva {r.Id, R.Status}); –
Editado mi publicación anterior con más información – Brian