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