/// <summary>
        /// This method tries to pull out the index name from
        /// a given field expression.
        /// </summary>
        /// <param name="exprTree">the original expression tree</param>
        /// <param name="fieldExpr">the field expression that should
        /// contain the indexed field</param>
        /// <returns></returns>
        private static string GetIndexName(LambdaExpression exprTree, Type iGrainType, Expression fieldExpr)
        {
            ParameterExpression iGrainParam = exprTree.Parameters[0];

            if (fieldExpr is MemberExpression)
            {
                Expression innerFieldExpr = ((MemberExpression)fieldExpr).Expression;
                if ((innerFieldExpr.NodeType == ExpressionType.Parameter && innerFieldExpr.Equals(iGrainParam)) ||
                    (innerFieldExpr.NodeType == ExpressionType.Convert && ((UnaryExpression)innerFieldExpr).Operand.Equals(iGrainParam)))
                {
                    return(IndexUtils.GetIndexNameOnInterfaceGetter(iGrainType, ((MemberExpression)fieldExpr).Member.Name));
                }
            }
            throw new NotSupportedException(string.Format("The provided expression is not supported yet: {0}", exprTree));
        }