.NET中如何实现这种高级搜索?
底层的sql语句可以select * from 表where 1=1,比如这样的:
public DataTable GetList(string w)
{
string sql = "select * from Scores where 1=1 "+w;
return DbHelperSQL.Query(sql).Tables[0];
}前台页面可以写方法把他选中的搜索条件获取到:
/// <summary>
/// 获取搜索条件
/// </summary>
/// <returns></returns>
public string GetStrWhere()
{
//筛选工号
if (!string.IsNullOrEmpty(doce))
{
strWhere += " and UserName like '%" + doce + "%'";
}
//筛选姓名
if (!string.IsNullOrEmpty(name))
{
strWhere += " and RealName like '%" + name + "%'";
}
//筛选部门
if (!string.IsNullOrEmpty(dep))
{
strWhere += " and DepartmentName like '%" + dep + "%'";
}
//筛选时间
if (!string.IsNullOrEmpty(startDate))
{
DateTime st = Convert.ToDateTime(Convert.ToDateTime(startDate).ToLongDateString());
strWhere += " and BuyTime >= " + "'" + st + "'";
}
//筛选结束时间
if (!string.IsNullOrEmpty(endDate))
{
DateTime end = Convert.ToDateTime((Convert.ToDateTime(endDate).AddDays(1).ToLongDateString()));
strWhere += " and BuyTime <= " + "'" + end + "'";
}//筛选状态
if (ddlStatus != "-1")
{strWhere += " and Status = " + "'" + ddlStatus + "'";
}
return strWhere;
}加载方法:
if (!IsPostBack)
{
strWhere = GetStrWhere();
GetList(strWhere);
}
2024-09-19 广告
不用sql和用sql你说的是什么意思?数据库检索和内存数据集筛选?建议通过数据库来查询。
不管用不用sql,筛选的核心都是条件的拼接,所以如果通过sql语句直接查询的话,按照条件拼接查询就行了,如果使用linq to sql也是一样的道理,只是拼接的方式有点儿区别。
顺便说一说,如果你是不清楚怎么实现这样的功能操作的话,其实很简单,页面那些按钮、下拉选框、文本框,都是一些页面控件,用户点击“搜索”的时候,应该会提交表单(包含了这些控件的值)到服务器,服务器能接收到这些控件的具体值,再根据接收到的值做查询筛选就行了。
比如说用第三方框架(如Lucene.NET)可否实现
当然可以实现你需要的功能,只是源码不一样而已,另外,因为涉及到搜索引擎了,所以就得注意下你的筛选数据的依据了,最好是能合理安排筛选条件提供合适的索引词汇。
既然用 Lucene.NET,分词之类的就不多说了,它也能实现传统的 and、or 之类的操作的,对照着来就行了。
这样的语句,后面的条件你可以判断是否勾选分别在原来的加上“ and 条件1=‘111’ ” 等等类似的。
不知道我理解你的意思还对