我有一个使用LinqDataSource作为数据源的转发器。输入查询字符串时,我想过滤结果,但仅在输入查询字符串时。如果没有查询字符串,则不应过滤结果,应返回所有结果。
我正在尝试在LinqDataSource的Selecting事件中向我的LinqDataSource添加WhereParameter,但它无法正常工作。这是我的代码:
protected void ldsImages_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
if (Request.QueryString["id"] != null)
{
e.WhereParameters.Add("ImageTypeID", Request.QueryString["id"]);
}
}
答案 0 :(得分:3)
添加onload事件来处理LinqDataSource _ * _ Load()到LinqDataSource似乎可以让你做以下事情:
protected void ldsAssets_Draft_Load(object sender, EventArgs e) {
string Where_Statement = " Planner_ID == @Planner_ID";
ldsAssets_Draft.WhereParameters.Add("Planner_ID", System.Data.DbType.Int32, User_ID.ToString());
if (this._DraftOrderStatus != BusinessLogic.DraftOrderStatus.All) {
Where_Statement += " AND Status_ID == @Status_ID";
ldsAssets_Draft.WhereParameters.Add("Status_ID", System.Data.DbType.Int32, ((int)this._DraftOrderStatus).ToString());
}
ldsAssets_Draft.Where = Where_Statement;
}
由于它是在对象的加载而不是选择的情况下调用的 - 你仍然可以使用你的对象而没有多少代码。
答案 1 :(得分:1)
您确定Request.QueryString [“id”]值不为空吗?
您是否在LinqDataSource上将AutoGenerateWhereClause属性设置为“true”?
仔细阅读Remarks section of the WhereParameters documentation page。
答案 2 :(得分:0)
我从未使用过LinqDataSource,但您是否可以查看here显示的结果? (来自网站的代码摘录):
protected void LinqDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
var cities = from city in citiesArray
where city.CompareTo("B") > 0
select city;
e.Result = cities;
}
因此,你有类似的东西:
protected void LinqDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
if(Request.QueryString["id"] != null)
{
var myImage = from img in imageSource
where img.ID == Request.QueryString["id"]
select img;
e.Result = myImage;
}
else
{
e.Result = imageSource;
}
}
有几点需要注意。首先,这是未经测试的:D。其次,如果您的ID是整数,请不要忘记将查询字符串强制转换为整数。最后,您应该在使用它之前清理查询字符串。虽然这可能不是一个主要问题,但这是一个很好的做法。
答案 3 :(得分:0)
在LinqDataSource
的标记中,您仍需要在Where
标记的asp:LinqDataSource
属性中声明参数。
示例:
<asp:LinqDataSource ID="LDS_Images" runat="server"
ContextTypeName="DataContext" TableName="ImagesTable"
Where="ImageTypeID == @ImageTypeID ...>
...
</asp:LinqDataSource>