我正在尝试在gridview上显示搜索结果。 我希望搜索显示姓氏和名字的结果。 我正在使用ASP.NET与Subsonic,并无法弄清楚如何修改下面的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();
答案 0 :(得分: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()。