2010-02-11 22 views
1

比方说,我有两个表(AddressPhone)在sql中有一对一的关系。我创建了相应的LINQ到SQL类,并将关联更改为OneToOneLinq中的一对一关联和过滤

我想通过筛选子对象来检索两个对象。 e.g我有以下查询工作正常:

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

有什么办法,我可以做下面的工作:

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

Phone类的构造函数初始化以上的Number财产。正如我所看到的,发出的查询包含一个子句,它通过id(主键)过滤Phones表,但不包含number子句。

如果我在visual studio中将Number设置为主键,那么它将包含在where子句中,但由于id的参数值为0,所以搜索仍不会返回任何内容。即使它工作,也不是解决方案Number不应该是主键。

回答

1

你在问什么不太合理。如果你想给出地址的电话元素,你可以通过访问Address.Phone属性来获得。

您无法初始化某个类型并将其用于投影,因为这是DLinq,其中将查询转换为数据库。你可以在Linq上做到这一点,但它会强制你列举你的列表,它会将所有数据库信息提取到内存中,这可能不利于性能...

我没有看到问题这里?您有地址,正在进行工作搜索,并且您可以通过访问地址属性来访问手机媒体资源。

+0

我只是有兴趣,如果有可能使第二个查询工作在第一个工作相同的方式。 据我所知这是不可能的。我对么? – Giorgi 2010-02-11 12:30:53

+0

正确。 Linq to SQL正在做的是创建一个类似于查询的“表达式树”(对于每个地址,检查电话属性,如果它等于100则返回),然后将其转换为SQL查询。将新对象提供给查询是没有意义的,因为它无法逻辑转换为SQL。但是,您可以获取所有地址,然后对查询执行此操作,但会影响性能。 – Spence 2010-02-11 13:15:46

+0

感谢您的回答 – Giorgi 2010-02-11 13:24:51