LinqKit子表达式调用非常慢

时间:2014-07-17 09:48:07

标签: c# linq entity-framework 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时,从LINQ生成SQL需要很长时间 - 远远超过DbItemAToFlatItemA和DbItemBToFlatItemB。

生成的SQL是完美的并且运行得很快但我不明白为什么生成它需要这么多时间

有什么想法吗?

谢谢。

0 个答案:

没有答案