2010-12-08 42 views
0

J'essaye d'accomplir ceci mais seulement ma première clause where est utilisée quand la requête s'exécute.Linq to SQL - Multiple où clasues à l'exécution

Cela doit être pour .Net 3.5, donc le WhereIf dans 4.0 n'est pas utilisable.

var query = 
    from tb in dataContext.TableOne 
    where tb.DateTimeCreated >= fromDate && 
     tb.DateTimeCreated <= toDate.AddDays(1) 
    select tb; 

if (!string.IsNullOrEmpty(reference)) 
{ 
    query.Where(tb => tb.Reference = reference)); 
} 

Merci

+0

Voulez-vous dire 'query.Where (tb => tb.Reference == référence);'? – Steven

Répondre

3
if (!string.IsNullOrEmpty(reference)) 
     query = query.Where(tb => tb.Reference = reference)); 
+0

@veggerby & Ives. merci les gars vous m'avez réparé, je vois que mon erreur n'attribuait pas ma clause where à la requête. – SetiSeeker

0

Try

suffit de le faire dans "un"

var query = (from tb in dataContext.TableOne 
         where (tb.DateTimeCreated >= fromDate && tb.DateTimeCreated <= toDate.AddDays(1)) && (string.IsNullOrEmpty(reference) || tb.Reference == reference) 
         select tb 
       ); 

ou comme le dit Ives, font:

query = query.Where(...) 
+0

Si vous le faites dans "un" et que la requête est envoyée à la base de données avec des parties inertes, l'optimiseur de requête ne sera pas en mesure de dire quelles parties sont inertes. Cela générera un mauvais plan de requête. –