LINQ外键中断查询

时间:2013-03-15 10:38:55

标签: sql sql-server linq sql-server-2008 foreign-keys

下面的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下运行查询。

为什么访问外键表中的数据会导致查询没有返回结果,我该如何解决?

1 个答案:

答案 0 :(得分:0)

我永远无法解决这个问题。相反,我更改了数据库结构,以便可以通过device_type字段在一个表中引用所有3种设备类型,并通过重用两列不同类型的引用号。

是的,设计没有完全标准化,但更简单。

我最终也使用了内联查询,因为我倾向于从LINQ获得的结果与我的预期不符,所以由于时间限制而放弃并采用简单的选项而不是搞乱。