2009-09-12 16 views
14

che sto usando LINQ to SQL per interrogare il mio database, Ho una domanda molto simile a questo:LINQ to SQL valore tra due valori doppi

var result = from db.MyTable.Where(d => (double)d.Price >= minValue) 

ho bisogno la clausola where per avere un d.Proce >= minValue, e d.Price =< maxValue (come una clausola T-SQL BETWEEN).

Come posso fare questo?

risposta

23

ne dite di questo:

var result = from db.MyTable.Where(d => (double)d.Price >= minValue 
             && (double)d.Price <= maxValue) 
7

Solo per completezza; se si sta costruendo una query basata su input diversi si può comporre con successive Where chiamate:

IQueryable<SomeType> query = db.MyTable; 
if(minValue != null) // a Nullable<double> 
{ 
    var actualMin = minValue.Value; 
    query = query.Where(d => (double) d.Price >= actualMin); 
} 
if(maxValue != null) // a Nullable<double> 
{ 
    var actualMax = maxValue.Value; 
    query = query.Where(d => (double) d.Price <= actualMax); 
} 
// keep working with "query", for example, query.ToList(); 
+1

Per motivi di leggibilità del codice, forse si vuole utilizzare la proprietà .HasValue su questi tipi nullable. – BrunoSalvino

+1

@Bruno meh, se si pensa a loro come tipi nullable, poi a me il confronto a nulla è più naturale, e confronta bene per i tipi di riferimento di test. –