我在sql中有一个数据表,在winform中有一个datagridview。数据表保存带有MouldID的模具的测量结果。对于每次测量,将50行结果记录到表中。为了跟踪同一模具的测量计数,我还具有MeasId列,该列对于每个测量输入均增加1。表格视图请参见图片。 我需要做的是,仅检索具有最后一个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));
这些查询都没有从数据表中返回我需要的内容。 我在做什么错了?
答案 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();
免责声明:此查询肯定可以优化,我正在研究更好的解决方案