比方说,我有两个表(Address
和Phone
)在sql中有一对一的关系。我创建了相应的LINQ到SQL类,并将关联更改为OneToOne
Linq中的一对一关联和过滤
我想通过筛选子对象来检索两个对象。 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
不应该是主键。
我只是有兴趣,如果有可能使第二个查询工作在第一个工作相同的方式。 据我所知这是不可能的。我对么? – Giorgi 2010-02-11 12:30:53
正确。 Linq to SQL正在做的是创建一个类似于查询的“表达式树”(对于每个地址,检查电话属性,如果它等于100则返回),然后将其转换为SQL查询。将新对象提供给查询是没有意义的,因为它无法逻辑转换为SQL。但是,您可以获取所有地址,然后对查询执行此操作,但会影响性能。 – Spence 2010-02-11 13:15:46
感谢您的回答 – Giorgi 2010-02-11 13:24:51