2

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 は完璧で高速に実行されますが、生成に時間がかかる理由がわかりません

何か案は ?

ありがとうございました。

4

0 に答える 0