Ho un metodo:L'uso di un'espressione lambda passata in un metodo rallenta una query di Entity Framework?
public static void GetObjects()
{
using(MyContext context = new MyContext())
{
var objects = context.Bars.Where(b => b.Prop1 != null)
.Select(b => new MyObject{Prop = b.Prop1, Name = b.Name})
.ToList();
foreach(var object in objects)
{
// do something with the object
}
}
}
ho riscritta il metodo per renderlo più generale, in modo che io possa passare in un Func
in modo che possa specificare l'istruzione where
e quale proprietà dalla tabella Bars
viene assegnato a MyObject.Prop
in questo modo:
public static void GetObjectsV2(Func<Bar, bool> whereFunc, Func<Bar, string> selectPropFunc)
{
using(MyContext context = new MyContext())
{
var objects = context.Bars.Where(whereFunc)
.Select(b => new MyObject{Prop = selectPropFunc(b), Name = b.Name})
.ToList();
foreach(var object in objects)
{
// do something with the object
}
}
}
GetObjectsV2
sembra funzionare molto più lento rispetto GetObjects
. Ci sono dei motivi per cui ciò influirebbe sulle prestazioni e, in tal caso, ci sono dei modi per aggirare questo problema mantenendo la funzione flessibile?
Grazie mille per la risposta rapida! – aubreyrhodes