2009-04-17 59 views
0

2.1以前,我是能写出这样的代码(使用AddWhere):查询有条件的地方参数

​​

这使得我可以建立很好的搜索表单,并且只能在用户输入表单变量搜索,我试图用2.1以简单的方式重现这个功能,并且无法弄清楚。有没有人有什么建议?

回答

2

我想出的解决方案是:

SqlQuery q = new Select("syKey").From<Search>().Where("1").IsEqualTo("1"); 
if (!String.IsNullOrEmpty(barcode)) q.And("Barcode").Like("%" + barcode.Trim() + "%"); 
if (!String.IsNullOrEmpty(fromDate)) q.And("FromDate").IsGreaterThanOrEqualTo(fromDate); 
if (!String.IsNullOrEmpty(toDate)) q.And("ToDate").IsLessThanOrEqualTo(fromDate); 
if (!String.IsNullOrEmpty(department)) q.And("DeptNo").Like("%" + department.Trim() + "%"); 
if (!String.IsNullOrEmpty(series)) q.And("SeriesNo").Like("%" + series.Trim() + "%"); 
if (!String.IsNullOrEmpty(altcode)) q.And("AltCode").Like("%" + altcode.Trim() + "%"); 

注意与默认Where(“1”)。IsEqualTo(“1”)我可以动态地将“And”添加到查询以使其工作。很高兴看到AddWhere带回来,因此您可以将WHERE命令堆叠在一起。

0
IDataReader rdr=new Select().From<Search>().Where("barcode").Like(..) 
.And("FromDate").GreaterThan(..) 
.And("ToDate").LessOrEqualTo(..) 
.And("DeptNo").Like() 
... 
.ExecuteReader(); 

http://blog.wekeroad.com/2008/01/10/subsonic-version-21-pakala-preview-the-new-query-tool/

现在,如果你喜欢冒险,你可以用3.0(这是在作品),你可以使用LINQ来做到这一点:

http://code.google.com/p/subsonicthree/

我很高兴在这里帮助...

+0

哇,这很快,在这么晚的时候。不完全是我在找什么,因为从来没有一个保证的地方,你从条码开始,但可能搜索其他值之一,所以我不希望条码在查询中。使用旧的AddWhere方法,您可以更加动态地使用where语句。 – 2009-04-17 06:31:12