private SortField CreateSortFieldFromExpr(MethodCallExpression node, bool reverse) { string name; var unaryExpr = node.Arguments[1] as UnaryExpression; if (unaryExpr == null) { throw new Exception("Invalid sort: " + node.ToString()); } var operand = unaryExpr.Operand as LambdaExpression; if (operand == null) { throw new Exception("Invalid sort: " + node.ToString()); } var memberExpr = operand.Body as MemberExpression; if (memberExpr != null) { name = memberExpr.Member.Name; return(LucQuery.CreateSortField(name, reverse)); } var methodCallExpr = operand.Body as MethodCallExpression; if (methodCallExpr == null) { throw new Exception("Invalid sort: " + node.ToString()); } if (methodCallExpr.Method.Name != "get_Item") { throw new Exception("Invalid sort: " + node.ToString()); } if (methodCallExpr.Arguments.Count != 1) { throw new Exception("Invalid sort: " + node.ToString()); } var nameExpr = methodCallExpr.Arguments[0] as ConstantExpression; if (nameExpr == null) { throw new Exception("Invalid sort: " + node.ToString()); } name = (string)nameExpr.Value; return(LucQuery.CreateSortField(name, reverse)); }