Kann ich meine EF-Objekte nur bestimmte Spalten in der ausgeführten SQL abrufen lassen? Wenn ich den unten stehenden Code ausführe, um Objekte abzurufen, gibt es etwas, das ich tun kann, um nur bestimmte Spalten abzurufen, falls gewünscht?
public IEnumerable<T> GetBy(Expression<Func<T, bool>> exp)
{
return _ctx.CreateQuery<T>(typeof(T).Name).Where<T>(exp);
}
Dies würde eine Select-Klausel erzeugen, die alle Spalten enthält. Aber wenn ich eine Spalte habe, die eine große Menge an Daten enthält, die die Abfrage wirklich verlangsamt, wie kann ich dann meine Objekte dazu bringen, diese Spalte aus der generierten SQL auszuschließen?
Wenn meine Tabelle Id(int), Status(int), Data(blob) hat, wie kann ich meine Abfrage machen werden
select Id, Status from TableName
anstelle von
select Id, Status, Data from TableName
Ausgehend von dem nachstehenden Vorschlag lautet meine Methode
public IEnumerable<T> GetBy(Expression<Func<T, bool>> exp, Expression<Func<T, T>> columns)
{
return Table.Where<T>(exp).Select<T, T>(columns);
}
Und ich nenne es so
mgr.GetBy(f => f.Id < 10000, n => new {n.Id, n.Status});
Ich erhalte jedoch einen Kompilierfehler:
Der Typ 'AnonymousType#1' kann nicht implizit in 'Entities.BatchRequest' umgewandelt werden.