public BinaryExpression GetDiscriminatorPredicate(IEntityType entityType)
        {
            if (!EntityType.IsAssignableFrom(entityType))
            {
                return(null);
            }

            var concreteEntityTypes
                = entityType.GetConcreteTypesInHierarchy().ToList();

            var discriminatorProperty = entityType.Cosmos().DiscriminatorProperty;

            var discriminatorPredicate = Equal(
                new KeyAccessExpression(discriminatorProperty, FromExpression),
                Constant(concreteEntityTypes[0].Cosmos().DiscriminatorValue, discriminatorProperty.ClrType));

            if (concreteEntityTypes.Count > 1)
            {
                discriminatorPredicate
                    = concreteEntityTypes
                      .Skip(1)
                      .Select(concreteEntityType
                              => Constant(concreteEntityType.Cosmos().DiscriminatorValue, discriminatorProperty.ClrType))
                      .Aggregate(
                          discriminatorPredicate, (current, discriminatorValue) =>
                          OrElse(
                              Equal(new KeyAccessExpression(discriminatorProperty, FromExpression), discriminatorValue),
                              current));
            }

            return(discriminatorPredicate);
        }
 public DocumentSource(IEntityType entityType, CosmosDatabase database)
 {
     _collectionId = entityType.Cosmos().ContainerName;
     _database     = database;
     _idProperty   = entityType.FindProperty(StoreKeyConvention.IdPropertyName);
 }
 public DocumentSource(IEntityType entityType, CosmosDatabase database)
 {
     _collectionId = entityType.Cosmos().ContainerName;
     _entityType   = entityType;
     _database     = database;
 }