2011-12-23 17 views
0

asp.net webformプロジェクト内セッション変数を持ち、ビジネスオブジェクトからデータを取り込んでいます。このオブジェクトにはIcollectionが含まれています.Icollectionはグリッドビューにバインドされています。linqを使用してセッション変数内のデータを照会する方法

myBase.GetAssocMInvolvedPeople(); //call to Business object 
    if (myBase.AssocMInvolvedPeople != null) 
    { 
    Session["sessBase"] = myBase; //sync session with object results 
    gv_Names.DataSource = myBase.AssocMInvolvedPeople; //bind Icollection to grid 
    gv_Names.DataBind(); 
    gv_Names.Visible = true; 
    } 

は、その後、グリッド上の私の行選択の中に私が選択した行

GridDataItem selectedItem = (GridDataItem)gv_Names.SelectedItems[0]; 
SecondaryID = selectedItem["ObjectId"].Text; 

のオブジェクトIDを取得する目標は、取得するために、オブジェクトIDを取得し、セッション変数(sessBase)を照会することですコレクションの残りの値(girdで表示されなかった値)をUIのフォーム/テキストフィールド形式で表示します。私はこれのための最善のアプローチは、セッション変数を照会するLinqを使用するが、これについて行くか入れ子のコレクション(AssocMInvolvedPeople)にアクセスする方法についてここでスタックしていると思うだろう。

私は、セッション変数に私のオブジェクトをバックリセットする方法でこれを設定することを前提となります

protected void GetAdditionalData() 
{ 
myBase = (BusinesObjectName)Session["sessBase"]; 

//here is where I am stuck how to query this object and select the records based upon the selected ID 
    ... 
    } 

私はこのデータを取得する最良の方法上の任意のヒントやアドバイスをいただければ幸いです

はつまり、あなたがSessionオブジェクトをキャスト型と閉鎖に入れた場合、あなたはそれを使用することができるか、標準のLINQクエリ内のオブジェクトの任意のコレクションプロパティする必要があり、

答えて

0

ありがとう:

var results = 
    from MyClass i in (Session["sessBase"] as MyBusinessObject).MyCollection 
    where secondaryID = i.ID 
    select i 

ビジネスオブジェクトをどのように構造化したかについて私はいくつかの決定を下したが、これ以上概念を実証する必要はないと思う。

+0

ありがとうlthibodeaux、これは元の質問の答えに最も近いものでした。これにより、私はクエリのオブジェクトに到達することができました。 – rlcrews

1

セッションを完全に削除し、データベースに直接クエリします。セッションはワークフローを複雑にし、メモリ使用量を増加させます。

データ項目は、グリッドにバインドされたときにもviewstateに格納されるため、バインドされた行から基になるデータ構造を取得できます。

いずれの場合も、このシナリオではセッションを使用しないでください。

+0

Jason私はビジネスオブジェクトがどのように作成されたかに基づいてセッションを使用していましたが、このオブジェクトは非常に大きく、このデータに対してクエリを実行してセッション変数にドロップするのはコストがかかると思いました。私は実際にページのパフォーマンスと負荷時間に影響を与えるので、viewstateのグリッドのすべての項目を設定することはできません。この例では、500以上のプロパティが返されていますが、グリッドには5しか表示されません。行が選択されたら、残りの495フィールドをuiにレンダリングする必要があります。 (はい私は知っているが、それらは要件です)。セッション変数はより良いアプローチに見えました。 – rlcrews

+0

グリッドをコレクションにバインドしているため、既にビューステートになっています。それが表示されているかどうかは関係ありません。 –

+0

洞察力Jasonのおかげで、私はオブジェクト全体がビューステートでシリアライズされていたことに気づいていませんでした。 – rlcrews

関連する問題