在选择事件中将WhereParameters添加到LinqDataSource

时间:2010-03-19 01:03:02

标签: c# asp.net linq

我有一个使用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"]);
    }
}

4 个答案:

答案 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>