public override IEnumerable<long> GetSingleIndexValues(ISingleValueIndex<IComparable, long> mySingleValueIndex, IComparable myIComparable)
 {
     return mySingleValueIndex.Where(kv => kv.Key.CompareTo(myIComparable) != 0).Select(kv => kv.Value);
 }
        public override IEnumerable<long> GetSingleIndexValues(ISingleValueIndex<IComparable, long> mySingleValueIndex, IComparable myIComparable)
        {
            if (mySingleValueIndex is IRangeIndex<IComparable, long>)
            {
                //use the range funtionality

                foreach (var aVertexID in ((ISingleValueRangeIndex<IComparable, long>)mySingleValueIndex).LowerThan(myIComparable, false))
                {
                    yield return aVertexID;
                }
            }
            else
            {
                //stupid, but works

                foreach (var aVertexID in mySingleValueIndex.Where(kv => kv.Key.CompareTo(myIComparable) < 0).Select(kv => kv.Value))
                {
                    yield return aVertexID;
                }

            }

            yield break;
        }
        /// <summary>
        /// Extract values from a single value index
        /// </summary>
        /// <param name="mySingleValueIndex">The interesting index</param>
        /// <param name="myConstant">The interesting range</param>
        /// <returns>An enumerable of vertexIDs</returns>
        private IEnumerable<long> GetSingleIndexValues(ISingleValueIndex<IComparable, long> mySingleValueIndex, RangeLiteralExpression myConstant)
        {
            if (mySingleValueIndex is IRangeIndex<IComparable, long>)
            {
                //use the range funtionality

                foreach (var aVertexID in ((ISingleValueRangeIndex<IComparable, long>)mySingleValueIndex)
                    .InRange(myConstant.Lower, myConstant.Upper, myConstant.IncludeBorders, myConstant.IncludeBorders))
                {
                    yield return aVertexID;
                }
            }
            else
            {
                //stupid, but works

                if (myConstant.IncludeBorders)
                {
                    foreach (var aVertexID in mySingleValueIndex
                        .Where(kv =>
                            (kv.Key.CompareTo(myConstant.Lower) >= 0) &&
                            (kv.Key.CompareTo(myConstant.Upper) <= 0))
                                .Select(kv => kv.Value))
                    {
                        yield return aVertexID;
                    }
                }
                else
                {
                    foreach (var aVertexID in mySingleValueIndex
                        .Where(kv =>
                            (kv.Key.CompareTo(myConstant.Lower) > 0) &&
                            (kv.Key.CompareTo(myConstant.Upper) < 0))
                                .Select(kv => kv.Value))
                    {
                        yield return aVertexID;
                    }
                }
            }

            yield break;
        }