角度提前搜索文本框

时间:2018-04-03 10:26:46

标签: sql-server angular search asp.net-web-api angular2-template

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

有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

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

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 );

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