1

SQL に 1 対 1 の関係を持つ 2 つのテーブル (Addressと) があるとします。Phone対応する linq を sql クラスに作成し、関連付けを次のように変更しました。OneToOne

子オブジェクトをフィルタリングして両方のオブジェクトを取得したい。たとえば、正常に機能する次のクエリがあります。

var n = db.Addresses.Where(t => t.Phone.Number == 100);

次の作業を行う方法はありますか:

var n = db.Addresses.Where(t => t.Phone == new Phone(100));

上記のPhoneクラス コンストラクターは、Numberプロパティを初期化します。発行されたクエリには、Phones テーブルを ID (主キー) でフィルター処理する句が含まれていますが、number 句は含まれていません。

Visual Studio で主キーとして設定Numberすると、where 句に含まれますが、id のパラメーター値が 0 であるため、検索では何も返されません。機能したとしてNumberも、主キーであってはならないため、解決策ではありません。 .

4

1 に答える 1

1

あなたが求めていることはまったく意味がありません。電話要素にアドレスを指定する場合は、Address.Phoneプロパティにアクセスします。

これはDLinqであり、クエリがDBに変換されるため、タイプを初期化してそれを使用して投影することはできません。これはLinqでオブジェクトに対して行うことができますが、リストを列挙する必要があり、すべてのデータベース情報がメモリにフェッチされるため、パフォーマンスが低下する可能性があります...

ここに問題はありませんか?あなたは住所を持っており、それを検索しており、Addressプロパティにアクセスすることでphoneプロパティにアクセスできます。

于 2010-02-11T12:24:47.960 に答える