/// <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)); }