LINQ Lambda Where()未按预期过滤

时间:2010-12-19 14:59:58

标签: linq entity-framework-4

我正在尝试使用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();

2 个答案:

答案 0 :(得分:4)

修改现有查询的位置 - 它会创建查询。您需要将调用的结果分配给Where,否则结果将被丢弃。试试这个:

IQueryable<Report> dbReports = db.SubmitReports;

if (...)
{
    dbReports = dbReports.Where(...);
}

答案 1 :(得分:0)

您永远不会使用Where方法的返回值。在哪里不修改它应用的IEnumerable但是返回一个Linq表达式,它将在执行时创建一个修改IEnumerable(即调用ToList时)。