2009-07-07 55 views
0

這就是例子構建對象

SQL

create view v_join 
as select m.* , d.oneDetail from master m, detail d 
where m.key = d.key 

LINQ

var view = from v in dc.v_join select new 
{ 
    Master = ???? /// that is an issue, how can I construct the objects using same fields but from another query, 
    Detail = v.oneDetail 

}; 

foreach (var entry in view) 
{ 
    Master mEntry = entry.Master; // then we can use it, there are no problems 
} 

這種情況相當經常遇到並沒有構造對象一些棘手的方式使用相同的字段,但從另一個角度來看,並使用。

當我在C#端進行這樣的加入時,性能低下,延遲加載等問題。無論如何,LINQ發出許多查詢來獲取每個細節記錄,在性能方面是不可察覺的。

必須有明顯的解決方案,我不能相信沒有人面臨同樣的問題。 所有明顯的解決方案,如dc.Translate幾乎相同,但不完全是我所需要的。

幫助讚賞。

回答

0

這是否符合您的需求?

Master = new Master() { Field1 = v.Field1, Field2 = v.Field2, Field3 = v.Field3 } 
+0

是的,但是我想避免手動構建每個字段 – igor 2009-07-07 14:45:32

+0

我不確定我是否理解。你需要一個高性能的解決方案,但你不想使用這種方法。你測試過它是否足夠快?如果是這樣,那麼爲什麼不使用這個構造函數呢? – 2009-07-07 15:17:29

1

從米中dc.Master 加入dc.Detail d上m.Key = d.Key 選擇新的{米,d};

+0

我試過這樣的方法,判斷結果的進一步處理速度非常慢,我想LINQ發出單獨的查詢來獲取每個細節記錄 – igor 2009-07-07 14:47:08

+0

它沒有。上面的查詢會導致一次打擊。如果遇到性能問題,請提供更多詳細信息(例如數據庫模式,表格詳細信息等)。 – KristoferA 2009-07-07 15:08:12

0

對我來說這聽起來很奇怪。你使用視圖的原因是在模型上有不同的「視圖」,而不是訪問原始模型。

我建議你留在LINQ加入主細節表,如果你確實需要的話,你可以通過使用loadWith Options擺脫懶惰加載。雖然正確調整,LINQ可以做解決性能問題的熱切加載。

0

你不能從dc.v_join v請勿 選擇新{ 法師=新的{Column1Name = v.masterColumn1,Column2Name = v.masterColumn2,...}, 詳細= V。 oneDetail }; ?