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)); }
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)); }
public ListRow(DatabaseMemoryInternal databaseMemory) { this.DatabaseMemory = databaseMemory; }