Замедляет ли использование лямбда-выражения, переданного в метод, запрос 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
         }
    }
}

Я реорганизовал метод чтобы сделать его более общим, чтобы я мог передать Func , чтобы я мог указать оператор where и какое свойство из таблицы Bars присваивается MyObject.Prop вроде этого:

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 кажется, работает намного медленнее, чем GetObjects . Есть ли какие-либо причины, по которым это может повлиять на производительность, и если да, то есть ли какие-нибудь способы обойти это, сохранив при этом гибкость функции?

9
задан Péter Török 31 January 2011 в 19:59
поделиться