angular 中的高级搜索文本框

advance search text box in angular

我从事在线搜索项目 我想制作一个搜索文本框,其工作方式如下:如果我想搜索乔写的一本书,书名是我的书,出版商是 tia。 我输入搜索:joe my book tia 或 tia jo book > 所以我会得到一个结果。 tia 来自 SQL 数据库中的 table joe 来自 SQL 数据库中的 table 我的书来自 SQL 数据库

中的 table

有人可以帮我吗?

如果您将另一列添加到您的数据 table(在您的数据库中),该列将包含来自其他三列的串联数据,然后在该列中进行搜索,您可以轻松完成此操作。

writer title    publisher  search_column
joe    my book  tia        joe my book tia

然后,您可以使用 LIKE 进行 SQL 查询以按该列进行搜索 ExecuteReader 示例。

var query = "select * from my_table where 1 = 1 " + filterQuery;

创建参数:

public static SqlParameter AddSqlParameter(string parameterName, object value)
        {
            var p = new SqlParameter(parameterName, value);
            return p;
        }
List<SqlParameter> sqlParameters = new List<SqlParameter>();
var filterQuery = "";

这将按空格拆分您的搜索输入

string[] words = searchInput.Split(' ');

遍历您的搜索词组并为找到的每个词组添加一个参数:

for (int i = 0; i < words.Count; i++) {
  sqlParameters.Add(AddSqlParameter("@p" + i.ToString(), words[i]));
    filterQuery = filterQuery  + " AND search_column LIKE " + "@p" + i.ToString();
}

将您的搜索查询和参数添加到 ExecuteReader:

public static List<T> ExecuteReader<T>(string commandText, List<SqlParameter> parameters) where T : new()
        {
            List<T> output = new List<T>();
            using (SqlConnection con = new SqlConnection(mySetting.ConnectionString))
            using (SqlCommand cmd = new SqlCommand(commandText, con))
            {
                cmd.Parameters.AddRange(parameters.ToArray());
                con.Open();
                using (SqlDataReader rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        T t = new T();
                        for (int i = 0; i < rdr.FieldCount; i++)
                        {
                            Type type = t.GetType();
                            PropertyInfo prop = type.GetProperty(rdr.GetName(i));
                            if (prop != null)
                            {
                                prop.SetValue(t, rdr.GetValue(i) is DBNull ? null : rdr.GetValue(i), null);
                            }
                        }
                        output.Add(t);
                    }
                    return output;
                }
            }
        }

像这样调用您的 ExecuteReader:

var result  = ExecuteReader<myClass>(query, sqlParameters );

如果您还有其他问题,请提出。