我正在尝试使用LINQ for EF构建一个查询,以根据一些基本逻辑过滤结果。出于某种原因,即使执行了以下Where()函数并设置了正确的参数,也会返回所有数据而不是Where()的过滤结果。
我已运行调试以确保我的if()语句确实允许Where()在适当的时候运行,并且它是。
我错过了什么?
var dbReports = db.SubmitReports;
if (Referee != String.Empty)
dbReports.Where(u => (u.Refree == Referee || u.Ar1Official == Referee || u.Ar2Official == Referee || u.FourthOfficial == Referee));
if (TeamName != String.Empty)
dbReports.Where(u => (u.HomeTeam == TeamName || u.VisitingTeam == TeamName));
if (PlayedOnStart != DateTime.MinValue && PlayedOnEnd != DateTime.MinValue)
dbReports.Where(u => (u.PlayedOn >= PlayedOnStart && u.PlayedOn <= PlayedOnEnd));
if (StateAssociation != String.Empty)
dbReports.Where(u => (u.StateAssociation == StateAssociation || u.StateAssociation2 == StateAssociation));
if (Division != String.Empty)
dbReports.Where(u => u.Division == Division);
if (ProfessionalLeague != String.Empty)
dbReports.Where(u => u.ProfessionalLeague == ProfessionalLeague);
if (AgeGroup != String.Empty)
dbReports.Where(u => u.AgeGroup == AgeGroup);
return dbReports.ToList();
答案 0 :(得分:4)
修改现有查询的位置 - 它会创建新查询。您需要将调用的结果分配给Where,否则结果将被丢弃。试试这个:
IQueryable<Report> dbReports = db.SubmitReports;
if (...)
{
dbReports = dbReports.Where(...);
}
答案 1 :(得分:0)
您永远不会使用Where方法的返回值。在哪里不修改它应用的IEnumerable但是返回一个Linq表达式,它将在执行时创建一个修改IEnumerable(即调用ToList时)。