2017-01-17 136 views
1

我一個小項目在C#WPF和實體框架工作的ID 6查詢其中id等於另一列

我需要做一個查詢,其中在表1列ID的ID等於列ID的ID表2.

任何能幫助我的人?

親切的問候

Cursus cursus = DWE.Cursus.Where(x => x.Naam == CurNaam).First(); 
TbNaam.Text = CurNaam; 
TbOmschrijving.Text = cursus.Omschrijving; 
CmbSelBoot.SelectedValue = cursus.BootID; 
TbPrijs.Text = cursus.Prijs.ToString(); 
//the following 2 lines should get the data from the new cursusweek table 
BeginDate.SelectedDate = Utils.UnixTimeStampToDateTime(Cursus.Begint); 
Enddate.SelectedDate = Utils.UnixTimeStampToDateTime(cursus.Eindigt); 

數據庫概述:

Database

你可以看到我想從Cursusweek獲取數據。 我從Cursus獲得了id,並且使用該id我想從Cursusweek表中獲取正確的數據。

+0

有沒有外鍵協會? –

+2

http://stackoverflow.com/help/how-to-ask – TravisO

+0

我會在數據庫概述 – Dutchdeveloper

回答

3

這應該是接近你所需要的:

var cursusWeek = Cursusweek 
        .Where(x => x.CursusId = cursus.CursusId) 
        .Select(x => new { Begint = x.Begint, Eindigt = x.Eindigt }) 
        .ToList(); 
+0

謝謝,我編輯了一行這一行,它應該工作。這是非常明顯的:(對於這個愚蠢的問題最後的代碼:Cursusweek cursusWeek = DWE.Cursusweeks.Where(x => x.CursusID == cursus.CursusID).FirstOrDefault(); ' – Dutchdeveloper

+2

由於關係是' one-many'你應該返回一個列表而不是FirstOrDefault – Null

+1

@Null,是的,謝謝。 – Forklift

1

取決於你想要什麼,它可以從叉車答案,或者這一個:

var v = cursus.Cursusweeks.ToList(); 
1

試試這個:

using(var db = YourDatabaseContext()) 
{ 
    var result = (from cw in db.Cursusweek 
        join c in db.Cursus on cw.CursusID equals c.CursusID 
        where c.CursusID = your_value 
        select cw).ToList(); 
} 
0

第一個也很簡單的解決方案,就是通過ORM創建一個新的查詢並採取你所需要的信息,樣本:

Cursus cursus = DWE.Cursus.FirstOrDefault(x => x.Naam == CurNaam); 

if (cursus != null) 
{ 
    TbNaam.Text = CurNaam; 
    TbOmschrijving.Text = cursus.Omschrijving; 
    CmbSelBoot.SelectedValue = cursus.BootID; 
    TbPrijs.Text = cursus.Prijs.ToString(); 

    var cursusWeek = DWE.CursusWeeks.FirstOrDefault(x => x.CursusId = cursus.CursusId); 

    if (cursusWeek != null) 
    { 
     BeginDate.SelectedDate = Utils.UnixTimeStampToDateTime(cursusWeek.Begint); 
     Enddate.SelectedDate = Utils.UnixTimeStampToDateTime(cursusWeek.Eindigt); 
    } 
} 

第二個選項,和最好的一個,就是讓一個查詢,包括在主查詢的CrsusWeek對象,從cursus對象使用它。我不確定這個選項,因爲我不知道你的整個模型。鑑於它是一個一個的關係,可能是:

Cursus cursus = DWE.Cursus.Include(x => x.CursusWeek).FirstOrDefault(x => x.Naam == CurNaam); 

if (cursus != null) 
{ 
    TbNaam.Text = CurNaam; 
    TbOmschrijving.Text = cursus.Omschrijving; 
    CmbSelBoot.SelectedValue = cursus.BootID; 
    TbPrijs.Text = cursus.Prijs.ToString(); 

    var cursusWeek = cursus.CursusWeek; 

    if (cursusWeek != null) 
    { 
     BeginDate.SelectedDate = Utils.UnixTimeStampToDateTime(cursusWeek.Begint); 
     Enddate.SelectedDate = Utils.UnixTimeStampToDateTime(cursusWeek.Eindigt); 
    } 
} 
else 
{ 
    // show a message about Cursus not found here.. 
} 

我也重構了你的代碼。使用FirstOrDefault可避免空結果出現異常並給出正確的行爲(消息)。

+0

如果他返回一個列表,他可以很容易地檢查列表是否爲空,他不必使用'FirstOrDefault'。 – Null

+0

我同意@Null,但是從示例代碼的角度來看在這個問題上,他不想要多個結果。 –

+0

以防萬一,因爲這兩個表之間的關係是「一對多」 – Null

相關問題