2010-12-19 13 views
1

LINQ for EFを使用して、基本的なロジックに基づいて結果をフィルタリングするクエリを作成しようとしています。何らかの理由で、次のWhere()関数を実行して正しいパラメータを設定しても、Where()のフィルタ結果の代わりにすべてのデータが返されます。LINQ Lambda 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(); 

答えて

4

はどこ既存のクエリを変更しない - それは新しいクエリを作成します。 Whereの呼び出しの結果を何かに割り当てる必要があります。そうでない場合は、結果は単に破棄されます。これを試してください:

IQueryable<Report> dbReports = db.SubmitReports; 

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

ありがとうございます!それは働いた –

0

Whereメソッドの戻り値は決して使用しないでください。どこでIEnumerableを変更しないかは、適用されますが、実行時に(つまり、ToListが呼び出されたときに)修正IEnumerableを作成するLinq式を返します。

関連する問題