public IBlankQuery Search(Parameter searchWords, SearchOperator searchOperator, Node searchNodeType, params FieldResult[] searchFields) { SetType(PartType.Search); SearchWords = searchWords; SearchOperator = searchOperator; Patterns = new[] { searchNodeType }; Fields = searchFields; if ((object?)searchNodeType.NodeAlias is null) { throw new ArgumentException($"The searchNodeType does not have an alias. Rewite your query to: {Example()}"); } foreach (FieldResult field in Fields) { if ((object?)field.Alias != searchNodeType.NodeAlias) { throw new ArgumentException($"The searchfield should be retrieved from the searchNodeType it's alias. Rewite your query to: {Example()}"); } if ((object?)field.Alias != searchNodeType.NodeAlias) { throw new ArgumentException($"The searchfield '{field.FieldName}' is not supported for free text searching. Add it to the free text index in an upgrade script."); } } return(New); string Example() { return($"Search({SearchWordExample()}, {OperatorExample()}, {NodeTypeExample()}, {SearchFieldExample()}, ...)"); } string SearchFieldExample() { return($"{AliasExample()}.{searchFields.FirstOrDefault().FieldName ?? "FieldName"}"); } string NodeTypeExample() { return($"node.{searchNodeType.Neo4jLabel}.Alias(out var {AliasExample()})"); } string AliasExample() { return(searchNodeType.Neo4jLabel.ToCamelCase()); } string OperatorExample() { return($"SearchOperator.{searchOperator.ToString()}"); } string SearchWordExample() { return($"Parameter.New<string>(\"{searchWords?.Name ?? "SearchWords"}\")"); } }
internal static string ToFriendlyDisplayString(this SearchOperator searchOperator) { string searchOperatorStr = searchOperator.ToString(); string displayText = Resources.ResourceManager.GetString(searchOperatorStr); if (displayText == null) { // split on capital letters and add spaces - purely as a fallback in case the enum value is not localised Regex capitalLetterMatch = new Regex("\\B[A-Z]", RegexOptions.Compiled); displayText = capitalLetterMatch.Replace(searchOperatorStr, " $&").ToLower(Thread.CurrentThread.CurrentCulture); } return(displayText); }
/// <summary> /// Gets the list subscribers. /// </summary> /// <param name="id">The identifier.</param> /// <param name="limit">The limit.</param> /// <param name="page">The page.</param> /// <param name="firstName">The first name to search for in the list.</param> /// <param name="lastName">The last name to search for in the list.</param> /// <param name="mobileNumber">The mobile number to search for in the list.</param> /// <param name="searchOperator">The search operator to use if multiple search params are provided.</param> /// <returns></returns> public SubscribersResponse GetListSubscribers(int id, int?limit = null, int?page = null, string firstName = null, string lastName = null, string mobileNumber = null, SearchOperator searchOperator = SearchOperator.AND, SubscriberStatus status = SubscriberStatus.ACTIVE) { var request = new RestRequest($"lists/{id}/subscribers"); request.Method = Method.GET; if (limit.HasValue) { request.AddParameter("limit", limit, ParameterType.GetOrPost); } if (page.HasValue) { request.AddParameter("page", page, ParameterType.GetOrPost); } var searchParams = 0; if (!string.IsNullOrWhiteSpace(firstName)) { request.AddParameter("first", firstName, ParameterType.GetOrPost); searchParams = searchParams + 1; } if (!string.IsNullOrWhiteSpace(lastName)) { request.AddParameter("last", lastName, ParameterType.GetOrPost); searchParams = searchParams + 1; } if (!string.IsNullOrWhiteSpace(mobileNumber)) { request.AddParameter("mobile_number", mobileNumber, ParameterType.GetOrPost); searchParams = searchParams + 1; } request.AddParameter("status", status.ToString(), ParameterType.GetOrPost); searchParams = searchParams + 1; if (searchParams > 1) { request.AddParameter("operator", searchOperator.ToString(), ParameterType.GetOrPost); } return(Execute <SubscribersResponse>(request)); }