我们有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时,从LINQ生成SQL需要很长时间 - 远远超过DbItemAToFlatItemA和DbItemBToFlatItemB。
生成的SQL是完美的并且运行得很快但我不明白为什么生成它需要这么多时间
有什么想法吗?
谢谢。