使用LinqToSql将数据从sql检索到datagridview

时间:2019-06-18 08:05:15

标签: c# winforms linq-to-sql

我在sql中有一个数据表,在winform中有一个datagridview。数据表保存带有MouldID的模具的测量结果。对于每次测量,将50行结果记录到表中。为了跟踪同一模具的测量计数,我还具有MeasId列,该列对于每个测量输入均增加1。表格视图请参见图片。 Table Screenshot 我需要做的是,仅检索具有最后一个MeasID的选定MouldID(从组合框)的行。 我尝试使用以下代码,但无法弄清楚如何使用MeasId将这些行分组。

const startingArray = [
  {
    id: 1,
    personId: 1,
    scores: [
      {
        id: 1,
        title: 'Google',
        score: 12
      },
      {
        id: 2,
        title: 'Bing',
        score: 23
      },
      {
        id: 3,
        title: 'Facebook',
        score: 34
      }
    ],
    score: null
  },
  {
    id: 2,
    personId: 1,
    scores: null,
    score: 123
  },
  {
    id: 3,
    personId: 2,
    scores: [
      {
        id: 4,
        title: 'Google',
        score: 7
      },
      {
        id: 5,
        title: 'Bing',
        score: 32
      },
      {
        id: 6,
        title: 'Facebook',
        score: 9
      }
    ],
    score: null
  },
  {
    id: 4,
    personId: 3,
    scores: null,
    score: 106
  },
  {
    id: 5,
    personId: 3,
    scores: [
      {
        id: 7,
        title: 'Google',
        score: 6
      },
      {
        id: 8,
        title: 'Bing',
        score: 4
      },
      {
        id: 9,
        title: 'Facebook',
        score: 3
      }
    ],
    score: 5
  }
]
function personScore(personId) {
  const entry = startingArray.find(entry => entry.personId === personId);
  if (!entry) {
    return 0;
  }
  let sum = entry.score || 0;
  if (entry.scores) {
    for (const {score} of scores) {
      sum += score;
    }
  }
  return sum;
}
console.log(personScore(1));

这些查询都没有从数据表中返回我需要的内容。 我在做什么错了?

1 个答案:

答案 0 :(得分:1)

看来您快到了。您只需要按最大值进行过滤,按ValueId进行排序:

string mouldId = comboBMouldID.SelectedValue.ToString();
int max = dataContext.SupplierVals                   
        .Where(m=>m.MouldID == mouldId)
        .Max(m => m.MeasId);
var query=dataContext.SupplierVals                   
        .Where(m=>m.MouldID == mouldId && m.MeasId == max).ToList();           

免责声明:此查询肯定可以优化,我正在研究更好的解决方案