查询id等于其他列的id的查询

时间:2017-01-17 18:19:42

标签: c# entity-framework linq

我正在研究C#WPF和实体框架6中的一个小项目

我需要进行查询,其中table1中列ID的id等于表2中列ID的id。

任何可以帮助我的人?​​

亲切的问候

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,并且我想从Cursusweek表中获取正确的数据。

4 个答案:

答案 0 :(得分:3)

这应该接近你所需要的:

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

答案 1 :(得分:1)

根据您的需要,它可以是Forklift的答案或者这个:

var v = cursus.Cursusweeks.ToList();

答案 2 :(得分: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();
}

答案 3 :(得分: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可以避免空结果出现异常,并提供正确的行为(消息)。