Выражение 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 идеален и работает быстро, но я не понимаю, почему на его генерацию требуется так много времени
Есть идеи?
Спасибо.