public IActionResult Search() { var userSearchSpec = new UserSearchSpec(); var criteria = new Criteria(); var attributeToReturn = new List <string>(); attributeToReturn.Add("Username"); attributeToReturn.Add("Firstname"); attributeToReturn.Add("UserGuid"); criteria.Attribute = new ResourceAttribute() { AttributeType = ResourceAttributeType.String, ResourceType = "User", Name = "Username", }; criteria.Operator = OperatorName.StringEquals; criteria.Value = new List <object> { "santosh.aryal", "shishir.baral" }; userSearchSpec.AddCriteria(criteria); userSearchSpec.AttributesToReturn = attributeToReturn; return(Json(_userService.Find(userSearchSpec))); }
public IEnumerable <User> Find(UserSearchSpec spec) { var o = new Dictionary <string, object>(); var sql = BuildSql(spec, out o); if (sql == string.Empty) { throw new Exception("Empty Sql"); } return(_context.Connection.Query <User>(sql, new DynamicParameters(o))); }
private string BuildSql(UserSearchSpec spec, out Dictionary <string, object> o) { var sql = string.Empty; var listOfAttributes = string.Join(",", spec.AttributesToReturn); var stringBuilder = new StringBuilder(); var dict = new Dictionary <string, object>(); stringBuilder.AppendLine($"SELECT {listOfAttributes} FROM dbo.Users "); if (spec.Criteria.Count > 0) { stringBuilder.AppendLine(" WHERE "); } foreach (var criteria in spec.Criteria) { switch (criteria.Operator) { case OperatorName.StringEquals: stringBuilder.AppendLine("("); var criteriaBuilder = new List <string>(); var i = 0; foreach (var value in criteria.Value) { criteriaBuilder.Add($"{criteria.Attribute.Name}=@{criteria.Attribute.Name}{i}"); dict.Add($"@{criteria.Attribute.Name}{i}", value.ToString()); ++i; } stringBuilder.Append(string.Join(" OR ", criteriaBuilder)); stringBuilder.AppendLine(")"); break; default: break; } } o = dict; return(stringBuilder.ToString()); }
public IEnumerable <User> Find(UserSearchSpec spec) { return(_userRepo.Find(spec)); }
public IEnumerable <User> Find(UserSearchSpec spec) { throw new NotImplementedException(); }
public void User_Search_WithSpec_ItemsFound() { var searchSpec = new UserSearchSpec { Name = "", NameFilter = "%{0}%", Active = true, Email = "", EmailFilter = "%{0}%", Login = "", LoginFilter = "%{0}%" }; var users = Repository.FindAll<User>(searchSpec); Assert.IsTrue(users.Any()); }