EF コンテキスト オブジェクトからオブジェクトを返す LinqKit 式があります。
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 を生成するのに非常に長い時間がかかります。
生成された SQL は完璧で高速に実行されますが、生成に時間がかかる理由がわかりません
何か案は ?
ありがとうございました。