0

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でこの機能を簡単に再現しようとしていますが、理解できません. 誰か提案はありますか?

4

2 に答える 2

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 コマンドを相互に積み重ね続けることができるようになるとよいでしょう。

于 2009-04-17T06:36:24.533 に答える
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/

ここでお役に立ててうれしいです...

于 2009-04-17T06:08:42.663 に答える