asp.net+ sql server
多条件查询(高级搜索),假如一共可以输入5个条件,但是用户根据需要可能只输2个或3个,也肯能是4个,写查询方法是不是也需要写多个方法,还是只需要写一个方法,有好的解决方法吗,提供点思路也可以啊,请数据库高手指点。
比如有三个条件,分别对应于三个TEXtBox,tj1\tj2\tj3
可以这样构造:
sql="select * from table_name where 1=1";
if(tj1!="")
{
sql+=" and tj1='"+tj1+"'"
}
if(tj2!="")
{
sql+=" and tj2='"+tj2+"'"
}
if(tj3!="")
{
sql+=" and tj3='"+tj3+"'"
}
用linq应该如何写?
参考下面文章
《LINQ to SQL语句之动态查询》
http://space.itpub.net/?uid-12639172-action-viewspace-itemid-364778
MSDN 的参考文档
动态查询是正解,不过楼上给的文章倒不怎么切题。
主要就是拼接条件,最后执行。
兄台,要说说如何拼条件啊
--这是一个方法,返回IList<AtAGlanceDetail> -- public IList<AtAGlanceDetail> GetAtAGlanceReportByCondition(int? supplierId, string container, DateTime? ETA, string FOBPoint, string HBLNum, DateTime? motherVesselETD, string voyage) { var data = GetAll().Where(c => c.SupplierId == supplierId && c.Container == container && c.ETA == ETA && c.FOBPoint == FOBPoint && c.HBLNum == HBLNum && c.MotherVesselETD == motherVesselETD && c.Voyage == voyage).AsQueryable(); return data.ToList(); } linq的 多条件拼接 是使用 dataSouce.Where(c => c.SupplierId == supplierId(条件参数) && c.Container == container && c.ETA == ETA ) 这种格式的写法
关键是条件的个数不一定。不想把所有数据一次性load到内存中,想像以前一样,通过条件,只把有用的load到内存中
@martuis: Linq 在调用 ToList() 时候,才回到执行查询,多个条件可以像这样写
var list = this.PaySetupPaymentHeaderDao.GetAll().AsQueryable();
// SN
if (this.ddlSN.SelectedValue != "[Select]")
{
list = list.Where(x => x.SN == this.ddlSN.SelectedValue);
}
// Supplier
if (this.ddlSearchSupplier.SelectedValue != "[Select]")
{
list = list.Where(x => x.SupplierId == GetFormatInt(this.ddlSearchSupplier.SelectedValue));
}
return list.ToList();
@shzy2012: 恩恩,非常感谢您的回答。