在2.1之前,我能够编写这样的代码(使用AddWhere):
Query q = new Query(Search.Schema);
q.BuildSelectCommand();
if (!String.IsNullOrEmpty(barcode)) q.AddWhere("Barcode", Comparison.Like, "%" + barcode.Trim() + "%");
if (!String.IsNullOrEmpty(fromDate)) q.AddWhere("FromDate", Comparison.GreaterOrEquals, fromDate);
if (!String.IsNullOrEmpty(toDate)) q.AddWhere("ToDate", Comparison.LessOrEquals, fromDate);
if (!String.IsNullOrEmpty(department)) q.AddWhere("DeptNo", Comparison.Like, "%" + department.Trim() + "%");
if (!String.IsNullOrEmpty(series)) q.AddWhere("SeriesNo", Comparison.Like, "%" + series.Trim() + "%");
if (!String.IsNullOrEmpty(altcode)) q.AddWhere("AltCode", Comparison.Like, "%" + altcode.Trim() + "%");
这使我能够创建漂亮的搜索表单,并且只搜索用户输入表单的变量,我试图用2.1以简单的方式重现这个功能,并且无法弄明白。有没有人有任何建议?
答案 0 :(得分: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命令堆叠在一起。
答案 1 :(得分: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/
我很高兴在这里帮忙......