public void Translate(MethodCallExpression method, ITranslationResult result) { if (method.Method.Name != MethodName || method.Arguments.Count != 2) { var message = string.Format(Resources.TranslatorMethodNotSupported, method.Method.Name); throw new ArgumentOutOfRangeException("method", message); } var lambda = (LambdaExpression)ExpressionTranslator.StripQuotes(method.Arguments[1]); // ReSharper disable ForCanBeConvertedToForeach if (lambda.Body.NodeType == ExpressionType.MemberInit) { var memberInit = (MemberInitExpression)lambda.Body; for (int i = 0; i < memberInit.Bindings.Count; i++) { MemberBinding binding = memberInit.Bindings[i]; AddColumn(binding.Member.Name, result); } } else if (lambda.Body.NodeType == ExpressionType.New) { var newInstance = (NewExpression)lambda.Body; for (int i = 0; i < newInstance.Arguments.Count; i++) { Expression argument = newInstance.Arguments[i]; var member = (MemberExpression)argument; AddColumn(member.Member.Name, result); } } else { throw new NotSupportedException(string.Format(Resources.TranslatorMemberNotSupported, lambda.Body.NodeType)); } // ReSharper restore ForCanBeConvertedToForeach AddPostProcessing(method, result); }