Выражение LinqKit вызывает очень медленно

У нас есть выражения LinqKit, возвращающие объекты из объектов контекста EF:

public class Example
{
    public static Expression<Func<DbItemA, FlatItemA>> DbItemAToFlatItemA
    {
        get
        {

            Expression<Func<DbItemA, FlatItemA>> flatItemA =
                (dbItemA) =>
                new FlatItemA
                    {
                        var1 = [...],
                        var2 = [...],
                        var99 = [...], 
                };

            return flatItemA;
       }
    }

    public static Expression<Func<DbItemB, FlatItemB>> DbItemBToFlatItemB
    {
        get
        {             
            Expression<Func<DbItemB, FlatItemB>> flatItemB =
                (dbItemB) =>
                new FlatItemB
                    {
                        vara = [...],
                        varb = [...],
                        varz = [...]
                };

            return flatItemB;
       }
    }

    public static Expression<Func<DbItemC, FlatItemC>> DbItemCToFlatItemC
    {
        get
        {
            var proxyItemA = DbItemAToFlatItemA;
            var proxyItemB = DbItemBToFlatItemB;

            Expression<Func<DbItemC, FlatItemC>> flatItemC =
                (dbItemC) =>
                new FlatItemC
                    {
                        flatA = DbItemAToFlatItemA.Invoke(dbItemC.DbItemA),
                        flatB = DbItemBToFlatItemB.Invoke(dbItemC.DbItemB),
                };

            return flatItemC;
       }
    }
}

DbItemAToFlatItemA и DbItemBToFlatItemB содержит много полей, но при непосредственном их вызове SQL генерируется быстро, но при вызове DbItemCToFlatItemC генерация SQL из LINQ занимает очень много времени - гораздо больше, чем DbItemAToFlatItemA и DbItemBToFlatItemB.

Сгенерированный SQL идеален и работает быстро, но я не понимаю, почему на его генерацию требуется так много времени

Есть идеи?

Спасибо.

0 ответов

Другие вопросы по тегам