2009-09-12 14 views
14

estoy utilizando LINQ to SQL para consultar mi base de datos, tengo una consulta muy similar a este:LINQ a SQL valor entre dos valores dobles

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

necesito la cláusula where para tener una d.Proce >= minValue, y d.Price =< maxValue (como una cláusula T-SQL BETWEEN).

¿Cómo puedo hacer esto?

Respuesta

23

¿Qué tal esto:

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

simplemente para la corrección; si usted está construyendo una consulta basada en las diferentes entradas se pueden componer con sucesivas llamadas Where:

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

En aras de la legibilidad del código, tal vez desee utilizar la propiedad .HasValue en estos tipos anulables. – BrunoSalvino

+1

@Bruno meh, si los consideras como tipos anulables, entonces para mí comparar con null es más natural, y se compara bien con los tipos de referencia de prueba. –