0

検索結果をグリッドビューに表示しようとしています。検索で姓と名の両方の結果を表示したい。SubsonicでASP.NETを使用していますが、以下のstatemntを変更する方法がわかりません。どこかにワイルドカードが必要だと思いますか?

Name: <asp:TextBox ID="txtSearchName" runat="server"></asp:TextBox> 

    GridView1.DataSource = new Select(PastAwardName.Schema.TableName + ".*", PastAwardType.Schema.TableName + ".*")
          .From(PastAwardName.Schema)
          .InnerJoin(PastAwardType.Schema.TableName, PastAwardType.Columns.VolID, PastAwardName.Schema.TableName, PastAwardName.Columns.VolID)
          .Where(PastAwardName.Columns.LName).IsEqualTo(this.txtSearchName.Text)
          .Or(PastAwardName.Columns.FName).IsEqualTo(this.txtSearchName.Text)
          .OrderAsc(PastAwardType.Columns.AwardYear)
          .ExecuteDataSet();
4

1 に答える 1

1

私はそれがうまくいくはずだと思います。

そのクエリから生成されたSQLを取得することに精通していますか?

SubSonic.SqlQuery q = new Select(PastAwardName.Schema.TableName + ".*", PastAwardType.Schema.TableName + ".*")
          .From(PastAwardName.Schema)
          .InnerJoin(PastAwardType.Schema.TableName, PastAwardType.Columns.VolID, PastAwardName.Schema.TableName, PastAwardName.Columns.VolID)
          .Where(PastAwardName.Columns.LName).IsEqualTo(this.txtSearchName.Text)
          .Or(PastAwardName.Columns.FName).IsEqualTo(this.txtSearchName.Text)
          .OrderAsc(PastAwardType.Columns.AwardYear);
string sql = q.BuildSqlStatement();

sqlの値(その行にブレークポイントがある)を確認して、問題のさらなる手がかりを提供します。

ワイルドカードの場合-次のようにワイルドカードをハードコーディングする代わりに、ContainsString()メソッドを使用します。

.Where(PastAwardName.Columns.LName).ContainsString(this.txtSearchName.Text)

これにより、プロバイダー固有のワイルドカード文字がパラメーターの最初と最後に自動的に追加されます。StartsWith()およびEndsWith()を実行することもできます。

于 2009-04-29T00:46:11.407 に答える