0

以下の LINQ クエリ (personDevices) は問題なく動作します。ただし、「123」を外部キーを介した値への直接アクセスに置き換えると、次のようになります。

t3.deviceTypeA.mobile_number

... クエリは 0 の結果を返します。最終的には、次のような選択ステートメントを実行したいと考えています。

number = 
t3.type == "phone" ? t3.deviceTypeA.mobile_number:
t3.type == "computer" ? t3.deviceTypeB.computer_number :
t3.type == "legacy" ? t3.deviceTypeC.legacy_number :
"nodata"

外部キーが必要な理由はこれで説明できますが、質問のクエリを簡略化しました。

var personDevices = from t1 in db.people
join t2 in db.peopleDevices on t1.person_id equals t2.person_id
join t3 in db.deviceRegistrations on t2.registration_id equals t3.registration_id

select new {
  t1.person_id,
  t1.name,
  t3.type,
  t3.generated_code,
  t3.hardware_id,
  devicetypeA_number = "123"
};

さまざまな理由から、外部キーの参照整合性を無効にし、データ チェックを削除しました。SQL Server 2008 を使用し、C# .NET 4 でクエリを実行します。

外部キー テーブルのデータにアクセスすると、クエリが結果を返さないのはなぜですか? また、どのように修正すればよいですか?

4

1 に答える 1