In questi giorni mi è capitato di dover selezionare degli oggetti (di tipo "Bag", ma che non sono borse) vicino alla scadenza (ossia a meno di 7 giorni dalla scadenza o già scaduti) con questa query LINQ (un po' rimaneggiata):
var q=from b in dc.Bags where (DateTime.Now-b.expiration_date).TotalDays>-7 select b;
e con un po' di stupore ho visto come LINQ-2-SQL traduce l'espressione presente nella clausola where:
(((CONVERT(Float,CONVERT(BigInt,(((CONVERT(BigInt,DATEDIFF(DAY, [t0].[data_scad], @p2))) * 86400000) + DATEDIFF(MILLISECOND, DATEADD(DAY, DATEDIFF(DAY, [t0].[data_scad], @p2), [t0].[data_scad]), @p2)) * 10000))) / 864000000000) > @p3)
con @p2=datetime.now e @p3=-7
Personalmente, avrei impiegato almeno 4 ore per scrivere la stessa cosa in T-SQL, ammesso di riuscirci!