2012-10-30 103 views
1

我希望與部分的關係返回一個數據集,查詢是確定的,但我得到的ID,而不是從其它表的真正價值......這是查詢LINQ to SQL的關係

 var thr= 
      from u in dc.thresholds 
      select u; 

這返回是這樣的:

id: 1 
name: some name 
type_id: 1 
owner_id: 1 

我想TYPE_ID與theese表的值owner_id,所以它可以是這樣的:

id: 1 
name: some name 
type_id: Danger 
owner_id: John Smith 

我希望你們中的一些可以給我一些建議,我開始與LINQ to SQL和我有點失落......

謝謝

+0

你有threshold'表和'type'表之間'的關係,也threshold'和''之間數據庫中的所有者表? ,如果是這樣的話,你將有一個與你的'閾值'對象的表的對象。 – Habib

回答

0

,如果你想顯示TYPE_ID名稱值(TYPE_NAME在其他表中),您應該使用如下所示的連接:

var thr= 
      from u in dc.thresholds 
     join y in dc.yourTable on u.type_id equal y.type_id 
     select new{u.id,u.name,typeName=y.name,....}; 
+0

它的工作原理,謝謝!問題解決了:) –

+0

我有一個問題,當列「type_id」爲空時,查詢不返回該行,因爲沒有與Types.id聯接。我該如何解決這個問題? –

+0

@ user1381537我不知道解決這個問題,用簡單的方法,你可以在另一個表中創建一個空行。 –

0

使用導航屬性根據需要加載數據。如果導航屬性不存在(Threshold.Type和Threshold.Owner),請打開您的dbml並添加關聯。

懶懶地使用導航屬性會導致額外的查詢。

List<Threshold> result = dc.Thresholds.ToList(); //run first query 

foreach(Threshold t in result) 
{ 
    Type type = t.Type; //run second query (per row) 
    Owner owner = t.Owner; //run third query (per row) 
} 

使用DataLoadOptions在查詢期間熱切的負載相關的數據。

DataLoadOptions options = new DataLoadOptions(); 
options.LoadWith<Threshold>(t => t.Type); 
options.LoadWith<Threshold>(t => t.Owner); 

dc.LoadOptions = options; 

List<Threshold> result = dc.Thresholds.ToList(); // run query 

foreach(Threshold t in result) 
{ 
    Type type = t.Type; //these values are already loaded by this point. 
    Owner owner = t.Owner; 
} 

寫入查詢與形狀加載數據你想

var query = 
    from t in dc.Thresholds 
    let type = t.Type 
    let owner = t.Owner 
    select new {Threshold = t, Type = type, Owner = owner}; 

var result = query.ToList(); //run query 

foreach(var x in result) 
{ 
    Threshold t = x.Threshold; 
    Type type = x.Type; //might be null. 
    Owner owner = x.Owner; //might be null. 
}