2

We have LinqKit expressions returning objects from EF context objects:

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 and DbItemBToFlatItemB contains many fields but when calling them directly the SQL is quickly generated, but when calling DbItemCToFlatItemC it takes a very long time to generate the SQL from the LINQ - much more than DbItemAToFlatItemA and DbItemBToFlatItemB.

The SQL generated is perfect and runs quickly but I do not understand why it takes so much time to generate it

Any ideas ?

Thank you.

user1756338
  • 211
  • 2
  • 13

0 Answers0