2010-01-14 35 views
0

我有以下的模型和關係:LINQ的 - 從鏈接的鏈接表中檢索值

Table: Granddad 
GranddadID 
GranddadName 

Table: Father 
FatherID 
GranddadID 
FatherName 

Table: Son 
SonID 
FatherID 
SonName 

在爺爺控制器:

public ActionResult Edit(int tmpgranddadid) 
{ 
    var q = (from g in _e.Grandad 
      where g.GrandadID == tmpgranddadid 
      select g).FirstOrDefault(); 

    string son_name = q.Father.Son.SonName.ToString(); // <- is wrong, how to do this? 

    return View(q); 
} 

你如何檢索鏈接的鏈接表中的值?

謝謝

+0

您應該遵循命名準則。只是一個旁註。 – 2010-01-14 13:19:24

+0

@Filip:關心澄清,我認爲這裏有很多命名準則可以應用。 – Lazarus 2010-01-14 13:21:21

+1

父親可以有多個兒子。你想要哪一個? – 2010-01-14 13:21:49

回答

0

假設您的數據源看起來是這樣的:

public class SomeDataSource 
{ 
    public List<Granddad> Granddad; 
    public List<Father> Father; 
    public List<Son> Son; 
} 

並假設你實際上是一個爺爺那麼第一孫子後:

var firstGrandson = (from son in _e.Son 
       join father in _e.Father on son.FatherID equals father.FatherID 
       join granddad in _e.Granddad on father.GranddadID equals granddad.GranddadID 
       where granddad.GranddadID == tmpgranddadid 
       select son).FirstOrDefault(); 

if (firstGrandson == null) 
    throw new Exception("This granddad has no grandsons."); 

string son_name = firstGrandson.SonName; 

這是你需要的嗎?

+0

等一下,我有沒有在這方面得到加入?該死的。 – Codesleuth 2010-01-14 13:42:39

+0

剛剛測試過,效果不錯。 – Codesleuth 2010-01-14 13:50:21

+0

尊敬的Codesleuth。謝謝你:)對不起,慢慢來試試你的例子我真的很新。我厭倦了你的代碼,但是當我要「在兒子的父親中加入父親。FatherID「我無法獲得FatherID顯示。在我的模型視圖中,FatherID在」導航屬性「 – noobplusplus 2010-01-14 14:23:17

1

也許你想任何可能多的兒子?

q.Fathers.First().Sons.First().SonName.ToString(); 

要小心,因爲如果父親沒有兒子,First()會拋出異常。這將處理這種情況:

string sonName = null; 
Father father = q.Fathers.FirstOrDefault(); 
if (father != null) { 
    Son son = father.Sons.FirstOrDefault(); 
    if (son != null) { 
     sonName = son.SonName.ToString(); 
    } 
} 
+0

大聲笑,謝謝馬克:) 我減少了它,並試圖。然而,我得到了一個錯誤:q.Fathers.First()。FatherName.ToString()。 錯誤是:對象引用未設置爲對象的實例。 請幫忙:) 除了使用First()還有另一種方法可以用來指定[n] son/element嗎?我試圖使用ElementAt(0),我不知道如何使用AsQueryable,它都失敗:( 謝謝 – noobplusplus 2010-01-14 13:43:17

+0

我已經更新了我的答案,告訴你如何處理父親沒有兒子的情況。 – 2010-01-14 13:46:48

+0

如果需要的話,你可能想要檢查一個引用是否加載了'IsLoaded()'和'Load()'。 – Wouter 2010-01-14 14:04:59