我正在运行LINQ查询一些我想要更新的记录,并在将它们放回数据库之前计算。当我试图计算在第二个条件中重新分配的Linq查询时,我遇到了麻烦。
graduates = graduates.Where(m => m.NotifySentInd == false);
然而,当我选择“AllStudents”选项时,查询就像在顶部附近返回正确数量的用户,但在选择“ApprovedNotYetSent”时从不在第二个条件或我在顶部的类似查询
public void ApproveAdultEdStudents(string Option, string CurrentYear)
{
var graduates = _unitOfWork.GraduateRepository.Graduates.Where(m => m.StudentTypeCd == "A" && m.SchoolYear == CurrentYear);
System.Diagnostics.Debug.WriteLine("A: " + graduates.Count());
var gradsSent = graduates.Where(m => m.NotifySentInd == false);
System.Diagnostics.Debug.WriteLine("B: " + gradsSent.Count());
if (Option == "AllStudents") {
foreach (var item in graduates) {
item.NotifySentInd = true;
item.DiplomaOrderDt = DateTime.Now;
item.DiplomaOrderToVendorInd = false;
}
System.Diagnostics.Debug.WriteLine("C: " + graduates.Count());
} else if (Option == "ApproveNotYetSent") {
graduates = graduates.Where(m => m.NotifySentInd == false);
foreach (var item in graduates) {
item.NotifySentInd = true;
item.DiplomaOrderDt = DateTime.Now;
item.DiplomaOrderToVendorInd = false;
}
System.Diagnostics.Debug.WriteLine("D: " + graduates.Count());
}
}
当我编码时,我得到以下结果。
AllStudents
A: 69
B: 68
C: 69
ApproveNotYetSent
A: 0
B: 0
D: 0
答案 0 :(得分:3)
扩展Daniel A. White的评论:
不要重新列举结果。
您需要对结果集进行评估,这基本上意味着在其末尾添加ToList()
或ToArray()
。
var graduates = _unitOfWork.GraduateRepository.Graduates
.Where(m => m.StudentTypeCd == "A" &&
m.SchoolYear == CurrentYear)
.ToList(); // This is the line you're missing
如果没有这个,您每次都会重新查询数据库以获取结果并创建新对象,从而搞乱您的计数。
答案 1 :(得分:2)
我可以通过评论回答你,但我没有足够的代表去做,我认为你的代码中有一个拼写错误:
else if (Option == "ApproveNotYetSent")
应该是“Aproved”没有?
无论如何,这是非常糟糕的,你应该总是使用强类型变量,为你的选项创建一个enum
并将其命名为OptionType然后你可以这样做:
public void ApproveAdultEdStudents(OptionType Option, string CurrentYear)
{
...
if(Option == OptionType.AllStudents)
//do stuff
...
]
答案 2 :(得分:1)
试试:graduates = graduates.Where(m => m.NotifySentInd == false).ToList();
这将创建一个列表,然后所有的计数都是相同的。