使用Linq to Sql将数据从2个不同的SQL表检索到datagridview

时间:2019-06-20 08:31:13

标签: c# linq-to-sql

我在sql中有两个表,我想使用第一个表中的4列和第二个表中的1列来检索和填充datagridview。我的问题是,我正在对第一个表中的数据进行一些排序,但我不知道如何联接第二个表的列数据。 MeasResults表是第一个表,而Molds是第二个表。
这是我获取MeasResults表数据的方式;

using (LinqDataClassesDataContext dataContext = new 
LinqDataClassesDataContext())
{
   var query = from x in dataContext.MeasResults
               where x.MoldID == cBMeasDBMID.SelectedValue.ToString()
               group x by x.MeasId into grp                           
               select grp.OrderByDescending(x => x.MeasId).First();

   var result = query.OrderByDescending(x => x.MeasId).Take(5);

   daGridLastMeas.AutoGenerateColumns = false;
   daGridLastMeas.Columns["MeasId"].DataPropertyName = "MeasId";
   daGridLastMeas.Columns["Date"].DataPropertyName = "Date";       
   daGridLastMeas.Columns["Plane"].DataPropertyName = "Plane";
   daGridLastMeas.Columns["Position"].DataPropertyName = "Postn";

   daGridLastMeas.DataSource = result;
}

我尝试实现 join 函数以从第二个表(模具)中获取 HeatCnt 值。

using (LinqDataClassesDataContext dataContext = new 
LinqDataClassesDataContext())
{
   var query = from x in dataContext.MeasResults
               where x.MoldID == cBMeasDBMID.SelectedValue.ToString()
               join y in dataContext.Moulds on x.MoldID equals y.MID
               group x by x.MeasId into grp                           
               select grp.OrderByDescending(x => x.MeasId).First();

   var result = query.OrderByDescending(x => x.MeasId).Take(5);

   daGridLastMeas.AutoGenerateColumns = false;
   daGridLastMeas.Columns["MeasId"].DataPropertyName = "MeasId";
   daGridLastMeas.Columns["Date"].DataPropertyName = "Date";
   daGridLastMeas.Columns["Heat"].DataPropertyName = "HeatCnt";       
   daGridLastMeas.Columns["Plane"].DataPropertyName = "Plane";
   daGridLastMeas.Columns["Position"].DataPropertyName = "Postn";

   daGridLastMeas.DataSource = result;
}

我知道我的问题出在查询的 select 部分,但我找不到如何添加 y.HeatCnt 来选择查询的方法。

我该怎么做?

注意

我已经研究了以下有关联接两个表的线程,但是它与我的代码的排列方式并不完全相同。

Retrieving data from multiple tables using linq-to-sql

  
    

编辑

  

Moulds_Table_SS

MeasResults_Table

Expected_Results(“热列”应显示 0

1 个答案:

答案 0 :(得分:0)

我对想要的数据有些困惑。但是您可以使用以下解决方案进行尝试,并获得预期的结果。

var query = 
from i in dataContext.Moulds
    let p = dataContext.MeasResults.Where(p2 => i.MID == p2.MoldID).FirstOrDefault() 
    where i.MID == cBMeasDBMID.SelectedValue.ToString()
    orderby i.MeasId descending
    select new
    {
        MeasId = i.MID,
        Date = p.Date,
        Heat = i.Heat,
        Plane = p.Plane,
        Position = p.Position
};