2009-09-12 9 views
14

używam LINQ do SQL do kwerendy mojej bazy danych, mam zapytanie bardzo podobny do tego:LINQ to SQL wartości pomiędzy dwoma wartościami podwójnych

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

muszę gdzie klauzula mieć d.Proce >= minValue i d.Price =< maxValue (podobnie jak klauzula T-SQL BETWEEN).

Jak mogę to zrobić?

Odpowiedz

23

Jak o tym:

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

Tylko dla kompletności; Jeśli budujesz kwerendę opartą na różnych wejść można komponować ją z kolejnymi Where połączeń:

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

Dla czytelności kodu, może chcesz użyć właściwości .HasValue na tych pustych typów. – BrunoSalvino

+1

@Bruno meh, jeśli myślisz o nich jako o zerowych typach, to dla mnie porównanie z wartością zerową jest bardziej naturalne i porównuje się dobrze z testowaniem typów referencyjnych. –