public static ICassandraQueryable <IFluentColumnFamily <CompareWith>, CompareWith> Get <CompareWith>(this CassandraColumnFamily <CompareWith> family, BytesType startKey, int keyCount, Expression <Func <IFluentRecordHasFluentColumns <CompareWith>, bool> > expression)
            where CompareWith : CassandraType
        {
            var setup = new CassandraQuerySetup <IFluentColumnFamily <CompareWith>, CompareWith> {
                IndexClause          = new CassandraIndexClause <CompareWith>(startKey, keyCount, expression),
                CreateQueryOperation = (s, slice) => new GetColumnFamilyIndexedSlices <CompareWith>(s.IndexClause, slice)
            };

            return(((ICassandraQueryProvider)family).CreateQuery(setup, null));
        }
        public static ICassandraQueryable <IFluentColumnFamily <CompareWith>, CompareWith> Get <CompareWith>(this CassandraColumnFamily <CompareWith> family, BytesType startKey, BytesType endKey, string startToken, string endToken, int keyCount)
            where CompareWith : CassandraType
        {
            var setup = new CassandraQuerySetup <IFluentColumnFamily <CompareWith>, CompareWith> {
                KeyRange             = new CassandraKeyRange(startKey, endKey, startToken, endToken, keyCount),
                CreateQueryOperation = (s, slice) => new GetColumnFamilyRangeSlices <CompareWith>(s.KeyRange, slice)
            };

            return(((ICassandraQueryProvider)family).CreateQuery(setup, null));
        }
        // queryable

        public static ICassandraQueryable <IFluentColumnFamily <CompareWith>, CompareWith> Get <CompareWith>(this CassandraColumnFamily <CompareWith> family, params BytesType[] keys)
            where CompareWith : CassandraType
        {
            var setup = new CassandraQuerySetup <IFluentColumnFamily <CompareWith>, CompareWith> {
                Keys = keys,
                CreateQueryOperation = (s, slice) => new MultiGetColumnFamilySlice <CompareWith>(s.Keys, slice)
            };

            return(((ICassandraQueryProvider)family).CreateQuery(setup, null));
        }
        public static ICassandraQueryable <IFluentSuperColumn <CompareWith, CompareSubcolumnWith>, CompareSubcolumnWith> GetSuperColumns <CompareWith, CompareSubcolumnWith>(this CassandraSuperColumnFamily <CompareWith, CompareSubcolumnWith> family, BytesType startKey, BytesType endKey, string startToken, string endToken, int keyCount, CompareWith superColumnName)
            where CompareWith : CassandraType
            where CompareSubcolumnWith : CassandraType
        {
            var setup = new CassandraQuerySetup <IFluentSuperColumn <CompareWith, CompareSubcolumnWith>, CompareSubcolumnWith> {
                KeyRange             = new CassandraKeyRange(startKey, endKey, startToken, endToken, keyCount),
                SuperColumnName      = superColumnName,
                CreateQueryOperation = (x, slice) => new GetSuperColumnRangeSlices <CompareWith, CompareSubcolumnWith>(x.KeyRange, x.SuperColumnName, slice)
            };

            return(((ICassandraQueryProvider)family).CreateQuery(setup, null));
        }
        // queryable

        public static ICassandraQueryable <IFluentSuperColumn <CompareWith, CompareSubcolumnWith>, CompareSubcolumnWith> GetSuperColumns <CompareWith, CompareSubcolumnWith>(this CassandraSuperColumnFamily <CompareWith, CompareSubcolumnWith> family, BytesType[] keys, CompareWith superColumnName)
            where CompareWith : CassandraType
            where CompareSubcolumnWith : CassandraType
        {
            var setup = new CassandraQuerySetup <IFluentSuperColumn <CompareWith, CompareSubcolumnWith>, CompareSubcolumnWith> {
                Keys                 = keys,
                SuperColumnName      = superColumnName,
                CreateQueryOperation = (x, slice) => new MultiGetSuperColumnSlice <CompareWith, CompareSubcolumnWith>(x.Keys, x.SuperColumnName, slice)
            };

            return(((ICassandraQueryProvider)family).CreateQuery(setup, null));
        }
 ICassandraQueryable <TResult, CompareWith> ICassandraQueryProvider.CreateQuery <TResult, CompareWith>(CassandraQuerySetup <TResult, CompareWith> setup, Expression expression)
 {
     return(new CassandraSlicePredicateQuery <TResult, CompareWith>(setup, this, expression));
 }