比方說,我有兩個表(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