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.