Subsonic 使用条件where参数进行查询

Subsonic 使用条件where参数进行查询,subsonic,Subsonic,在2.1之前,我能够编写这样的代码(使用AddWhere): 这使我能够创建漂亮的搜索表单,并且只搜索用户输入表单中的变量,我试图用2.1以一种简单的方式重现此功能,但无法理解。有人有什么建议吗?IDataReader rdr=new Select().From().Where(“条形码”).Like(…) IDataReader rdr=new Select().From<Search>().Where("barcode").Like(..) .And("FromDate").Gr

在2.1之前,我能够编写这样的代码(使用AddWhere):

这使我能够创建漂亮的搜索表单,并且只搜索用户输入表单中的变量,我试图用2.1以一种简单的方式重现此功能,但无法理解。有人有什么建议吗?

IDataReader rdr=new Select().From().Where(“条形码”).Like(…)
IDataReader rdr=new Select().From<Search>().Where("barcode").Like(..)
.And("FromDate").GreaterThan(..)
.And("ToDate").LessOrEqualTo(..)
.And("DeptNo").Like()
...
.ExecuteReader();
.和(“起始日期”)。大于(…) 和(“ToDate”)。LessOrEqualTo(……) 。和(“DeptNo”)。类似() ... .ExecuteReader();

现在,如果你喜欢冒险,你可以使用3.0(正在开发中),你可以使用Linq来实现这一点:


我很乐意在此提供帮助……

我提出的解决方案是:

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() + "%");
SqlQuery q=new Select(“syKey”).From(),其中(“1”).IsEqualTo(“1”);
如果(!String.IsNullOrEmpty(barcode))q.和(“barcode”)。类似(“%”+barcode.Trim()+“%”);
如果(!String.IsNullOrEmpty(fromDate))q.和(“fromDate”).大于或等于(fromDate);
如果(!String.IsNullOrEmpty(toDate))q.And(“toDate”).IsLessThanOrEqualTo(fromDate);
如果(!String.IsNullOrEmpty(department))q.和((“DeptNo”)类似(“%”+department.Trim()+“%”);
如果(!String.IsNullOrEmpty(series))q.和(“SeriesNo”)类似(“%”+series.Trim()+“%”);
如果(!String.IsNullOrEmpty(altcode))q.和(“altcode”)。类似(“%”+altcode.Trim()+“%”);

请注意,默认情况下,Where(“1”).IsEqualTo(“1”)我可以在查询中动态添加“And”以使其正常工作。看到AddWhere被带回来会很好,这样您就可以继续将WHERE命令堆叠在一起。

哇,这太快了,而且时间太晚了。不完全是我要找的,因为从来没有一个保证的地方,你从条形码开始,但可能会搜索其他值之一,所以我不希望在查询中使用条形码。使用旧的AddWhere方法,您可以更动态地使用where语句。哦,我不能使用3.0,因为客户端环境是一个内部网,IT部门没有安装任何高于.Net 2.0的内容,所以我必须有一个2.0解决方案。但是,谢谢你的回复
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() + "%");