簡體   English   中英

在Selecting事件中將WhereParameters添加到LinqDataSource

[英]Add WhereParameters to LinqDataSource in Selecting event

我有一個使用LinqDataSource作為數據源的轉發器。 輸入查詢字符串時,我想過濾結果,但是僅當輸入查詢字符串時。 如果沒有查詢字符串,則不應過濾結果,而應返回所有結果。

我試圖在LinqDataSource的Selecting事件中將WhereParameter添加到我的LinqDataSource中,但是它不起作用。 這是我的代碼:

protected void ldsImages_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    if (Request.QueryString["id"] != null)
    {
        e.WhereParameters.Add("ImageTypeID", Request.QueryString["id"]);
    }
}

將一個onload事件添加到LinqDataSource來處理LinqDataSource _ * _ Load()似乎可以使您執行以下操作:

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;
}

由於它是在對象的負載而不是選擇上加載的,因此您仍然可以在沒有太多代碼的情況下使用對象。

您確定Request.QueryString [“ id”]的值不為null嗎?

您是否在LinqDataSource上將AutoGenerateWhereClause屬性設置為“ true”?

請仔細閱讀WhereParameters文檔頁面的“ 備注”部分

我從來沒有使用過LinqDataSource,但是您不能查詢顯示的結果嗎? (從站點提取代碼):

 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是整數,請不要忘記將查詢字符串轉換為整數。 最后,您應該在使用查詢字符串之前對其進行清理。 盡管在這里可能不是主要問題,但這是很好的實踐。

LinqDataSource的標記中,您仍然需要在asp:LinqDataSource標記的Where屬性中聲明參數。

例:

<asp:LinqDataSource ID="LDS_Images" runat="server" 
    ContextTypeName="DataContext" TableName="ImagesTable" 
    Where="ImageTypeID == @ImageTypeID ...>
 ...
</asp:LinqDataSource>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM