2

我们有 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 非常完美,运行速度很快,但我不明白为什么生成它需要这么多时间

有任何想法吗 ?

谢谢你。

4

0 回答 0