LINQので一対一の関連とフィルタリング
-
19-09-2019 - |
質問
のは、私は1対1の関係を持っているSQLの二つのテーブル(Address
とPhone
)を持っているとしましょう。私は、SQLのクラスに対応するLINQを作成し、
OneToOne
する関連付けを変更しました
私は、子オブジェクトをフィルタリングすることにより、両方のオブジェクトを取得します。例えば、私は正常に動作し、次のクエリを持っています:
var n = db.Addresses.Where(t => t.Phone.Number == 100);
私は、次の作業を行うことができます方法はあります:
var n = db.Addresses.Where(t => t.Phone == new Phone(100));
上記Phone
クラスのコンストラクタはNumber
プロパティを初期化します。私が発行されたクエリを見ることができるように含まれていない中で、ID(主キー)により、電話テーブルをフィルタ句が、数句が含まれています。
私はVisual Studioで主キーとしてNumber
を設定した場合、それは、where句に含まれているが、idのパラメータ値は、それがNumber
が必要として、それは解決策ではない働いていた場合でも0であるように、検索は、まだ何も返しません主キーではない。
解決
あなたが求めていることは非常に意味がありません。あなたがアドレスを与えられた携帯電話の要素が必要な場合は、Address.Phoneプロパティにアクセスすることで、これを持っています。
あなたはタイプを初期化し、これはクエリがDBにダウン変換さDLinq、あるように投影することを使用することはできません。あなたは、オブジェクトへのLINQでこれを行うことができますが、それは良くないかもしれませんメモリにすべてのデータベース情報を、フェッチでしょうあなたのリストを、列挙するためにあなたを強制するパフォーマンスのために...
私はここでの問題が表示されませんか?あなたはアドレス、そのための作業検索を持っていて、Addressプロパティにアクセスすることにより、携帯電話のプロパティにアクセスすることができます。