Esempio n. 1
0
        protected override Expression VisitConstant(ConstantExpression node)
        {
            // Database
            //
            // This combination is not possible (anymore) for async queries. Also: EntityQueryable<> is an internal API
            // if (node.Type.IsGenericType && node.Type.GetGenericTypeDefinition() == typeof(EntityQueryable<>)) // For example: Query.Where(item => item.Id == 3);
            // {
            //     DatabaseEnumList.Add(DatabaseEnum.Database);
            // }

            // MemorySingleton
            if (node.Value?.GetType().BaseType == typeof(EnumerableQuery))
            {
                var enumerable = node.Value.GetType().GetField("_enumerable", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(node.Value);
                if (enumerable is IListRow)
                {
                    DatabaseMemoryInternal databaseMemory = ((IListRow)enumerable).DatabaseMemory;
                    if (databaseMemory == DatabaseMemoryInternal.Instance)
                    {
                        DatabaseEnumList.Add(DatabaseEnum.Memory);
                    }
                }
            }

            return(base.VisitConstant(node));
        }
Esempio n. 2
0
        protected override Expression VisitConstant(ConstantExpression node)
        {
            // Database
            if (node.Type.IsGenericType && node.Type.GetGenericTypeDefinition() == typeof(EntityQueryable <>))
            {
                DatabaseEnumList.Add(DatabaseEnum.Database);
            }

            // MemorySingleton
            if (node.Value?.GetType().BaseType == typeof(EnumerableQuery))
            {
                var enumerable = node.Value.GetType().GetField("_enumerable", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(node.Value);
                if (enumerable is IListRow)
                {
                    DatabaseMemoryInternal databaseMemory = ((IListRow)enumerable).DatabaseMemory;
                    if (databaseMemory == DatabaseMemoryInternal.Instance)
                    {
                        DatabaseEnumList.Add(DatabaseEnum.MemorySingleton);
                    }
                }
            }

            return(base.VisitConstant(node));
        }