2009-05-03 15 views
2

私はthis oneに関連する質問があります。私は計算(集計)をしたくないですが、関連から表示値を取得する必要があります。私のC#コードでは、外部キーの制約によりLinqが必要な配線をすべて生成するため、値を直接参照することができます。 IQueryableをGridviewデータソースプロパティとして指定し、結果セットのプライマリエンティティの列ではないものを参照すると、その列が存在しないというエラーが発生します。 Linqの入門者として、私は割り当てが暗黙のうちにIQueryableをリストに変換していると推測しており、関連は失われています。 私の質問は、これを行う良い方法は何ですか?Linq to SQLとGridviewデータソース

私は、グリッドビューに必要なすべての列を含む匿名型を返す並列クエリを記述することで、この問題を回避できるとします。それを行うことで、私はすでに持っているデータを重複してメモリに保持しているようです。データソースを割り当てる際に、インメモリのデータ構造を即座にクエリできますか?または、より直接的なソリューションがありますか?

グリッドビューは、医師の医療グループの関連付けを表示することになっており、関連の名前はルックアップテーブルにあります。だから、

  IQueryable<Physician> ph = 
         from phys in db.Physicians 
         //from name in phys.PhysicianNames.DefaultIfEmpty() 
         //from lic in phys.PhysicianLicenseNums.DefaultIfEmpty() 
         //from addr in phys.PhysicianAddresses.DefaultIfEmpty() 
         //from npi in phys.PhysicianNPIs.DefaultIfEmpty() 
         //from assoc in phys.PhysicianMedGroups.DefaultIfEmpty() 
         where phys.BQID == bqid 
         select phys; 

alt text http://heeroz.com/phys.jpg

、デニス回答に基づいて、私は私のクエリからすべての不要なものを削除しました。私は最初に正しい質問をすることを求めていないかもしれないと考えました。

とにかく、このページには医師のデータが表示されます。私はグリッド内のすべての医療グループの所属を表示したい(そして、ユーザーが所属を挿入、編集、更新できるようにする)。私は今、明示的にこれらの他のテーブルに参加する必要はないことを認識しています.Linqは私のためにそうしています。私は、子の関連付けの連鎖を通してそれを参照することによって、別のテーブルにあるライセンス番号にアクセスすることができます。 私は戻って私の質問に私をもたらしたGridView、医療グループ名を参照することはできません。

AffiliationGrid.DataSource = ph.First().PhysicianMedGroups; 

これは動作しません、med_group_print_nameは、GridViewのためにアクセスできないため。再び

A field or property with the name 'med_group_print_name' was not found on the 
selected data source. 

、私がLinqを理解していないことがあまりにも明白であれば、私と一緒にいてください...私はそうしないので。

答えて

1

あなたのクエリは奇妙に思えます。

ph = from phys in db.Physicians 
    where phys.BQID == bqid 
    select phys; 

をグリッドに単純に表示するようにしてください。それはうまくいくはずです。 また、Load()の呼び出しはなぜですか?グリッドがバインドされているときにDataContextが破棄されない場合は、その必要はありません。

あなたはまだ問題がある場合、あなたは役立つだろうあなたが得るエラーメッセージを投稿してくださいすることができますが...

パート2

問題は、名前がPhysMedGroupに効果的ではないということです。名前にアクセスするには、そのクラスのプロパティであるため、あるレベルをMedGroupLookupまでナビゲートする必要があります。

使用しているテクノロジ(WinFormsまたはWebフォームのようです)に応じて、MedGroupLookup.med_group_print_nameにアクセスするようにデータバインディングを設定する必要があります。

+0

はい私は負荷が必要ではないと考えました。私は私の質問を改訂した。 – cdonner

+0

か、まもなくそのことが行われます。 – cdonner

+0

それから: 'MedGroupLookup.med_group_print_name'という名前のフィールドまたはプロパティが、選択したデータソースに見つかりませんでした。 – cdonner