ttEmpExpense has more than one record error even when looping

I know this question has been asked before, but I am a bit confused as to why I am getting the error.
I have a data directive (Standard) that is supposed to send an email to the employee when an expense has been approved. I added code in to set the information for the email like this:

rejComments = "";
ExpComment = "";
ExpAmount = (decimal)0.0;
ExpDate = new DateTime();
sendEmail = false;

foreach (var row in ttEmpExpense)
{
  if (row.EmpID != null)
  {
    if (row.RowMod == "U")
    {
    empNo = Db.EmpBasic.Where(o=>o.Company == row.Company && o.EmpID == row.EmpID).FirstOrDefault().DcdUserID ; 
    empEmail = Db.UserFile.Where(o=>o.DcdUserID == empNo).FirstOrDefault().EMailAddress;
    //ExpComment = row.MiscCode.Length > 0 ?row.MiscCode: "Unknown";
    ExpComment = row.ClaimRef;
    ExpAmount = row.DocTotalExpenseAmt;
    ExpDate = row.ExpenseDate;
    sendEmail = true;
    }
  }
}

I have it looping through the ttEmpExpense table and checking for the RowMod=“U”. I would have thought this would stop the more than one record error but it has not.
Here is a snapshot of the BPM:


The first condition checks to see if the Expense Status goes to “A” and then processes the code above. The other condition checks for “R” and does similar logic indicating it is being rejected. In both cases if the sendEmail flag is true it sends an email (or at least it is supposed to).
What could be causing this code to error when it is looping through the ttEmpExpense table?