我有两个数据库表;一个叫Mould,另一个叫MeasResult。 模具表具有MID作为主键,MeasResult表具有名为MoldID的外键,该外键引用了MID。 我正在使用此外键将测量记录到MeasResult表中。 MeasResult表还具有一个MeasID列,用于跟踪测量插入计数。对于每次测量,我都会记录50行数据。 我需要的是,每次注意MoldID(表中的外键),每次记录新的测量值时,都需要将此MeasID值增加1。
我当前的代码不介意外键,它只是为每个测量日志将MeasResult值增加一。
using (LinqDataClassesDataContext dataContext = new
LinqDataClassesDataContext())
{
var measid = dataContext.MeasResults.Select(a =>
a.MeasId).Where(p => p != null).Max() + 1;
string id = ""; string plane = ""; int pos = 0; int dist = 0; double apert = 0;
id = comboBMouldID.SelectedValue.ToString();
plane = comboBSurface.SelectedItem.ToString();
pos = Convert.ToInt32(txtTravelPos.Text);
for (int i = 0; i < daGridMeas.Rows.Count - 1; i++)
{
dist = Convert.ToInt32(daGridMeas.Rows[i].Cells[0].Value.ToString());
apert = Convert.ToDouble(daGridMeas.Rows[i].Cells[1].Value.ToString());
var st = new MeasResult();
{
st.MoldID = id;
st.Plane = plane;
st.Postn = pos;
st.Distnc = dist;
st.Apert = apert;
st.MeasId = measid;
st.Date = DateTime.Now;
};
dataContext.MeasResults.InsertOnSubmit(st);
dataContext.SubmitChanges();
}
如何更改代码,以便针对特定MoldID进行的每次测量都会使MeasID增加1?
答案 0 :(得分:0)
当前,您的代码正在获取所有MeasId并递增最大值。尝试将where过滤器放在select方法之前。
var measid = dataContext.MeasResults.Where(mr => mr.MoldID == id).Select(a => a.MeasId).Max() + 1;
这里的想法是,不是从整个表中选择最大MeasId值,而是首先过滤掉除所记录的MoldID的测量值之外的所有值。
string id = ""; string plane = ""; int pos = 0; int dist = 0; double apert = 0;
id = comboBMouldID.SelectedValue.ToString();
plane = comboBSurface.SelectedItem.ToString();
pos = Convert.ToInt32(txtTravelPos.Text);
var tmpRecord = dataContext.MeasResults.Where(mr => mr.MoldID == id).OrderByDescending(mr => mr.MeasId).FirstOrDefault();
int measid = tmpRecord != null ? tmpRecord.MeasId + 1 : 1;
...
tmpRecord语句为MeadResults表过滤所有MoldID等于所选ID的记录。然后,我们使用MeasId作为排序列对它们进行降序排序。最后,我们采用最高记录或空记录(如果不存在)。第二行首先检查记录是否为空,然后它将获取该记录的MeasId并将其递增1。如果记录为空,那么我们将分配值1。
答案 1 :(得分:0)
然后,根据您的回答,它应该非常简单。
使用此MoldID计算现有记录数:
var NumberOfPreviousMeasurements = dataContext.MeasResults.Where(m => m.MoldId == comboMouldID.SelectedValue.ToString()).Count();
然后将该值分配为新记录的MeasId。 这样就够了吗?