2008-09-18 8 views

Respuesta

29

Si desea utilizar el método literal, es como esto:

var query = from l in transaction_log 
      where SqlMethods.Like(l.stoptime, "%2008%") 
      select l; 

Otra opción es:

var query = from l in transaction_log 
     where l.stoptime.Contains("2008") 
     select l; 

Si es un DateTime:

var query = from l in transaction_log 
     where l.stoptime.Year = 2008 
     select l; 

Ese método es en el System.Data.Linq.SqlClient namespace

+0

genial. Estoy fuera de funcionamiento. Tuve que encasillar el "tiempo de reposo" en un DateTime para acceder a la propiedad Year, pero no fue un gran problema. –

1
from x in context.Table where x.Contains("2008") select x 
+0

No estoy seguro de si esto da como resultado el Sql adecuado. Tendría que perfilarlo para ver. – Will

1

Si el tipo de datos de tiempo de parada es una cadena, puede utilizar la función .Contains(), y también .StartsWith() y .EndsWith().

0

Si usa el método contains para, a continuación, está haciendo un LIKE '% somestring%'. Si usa un método de inicio, entonces es lo mismo que 'somestring%'. Finalmente, endswith es lo mismo que usar '% somestring'.

Para resumir, contiene encontrará cualquier patrón en la cadena, pero comienza con y le ayudará a encontrar las coincidencias al principio y al final de la palabra.

0

El punto realmente interesante es que .NET crea consultas como "Seleccionar * de la tabla donde se nombra como '% test%'" cuando se usa "de x en contexto.Table donde x.Contains (" test ") seleccione x "que es bastante impresionante

0

Gracias - buenas respuestas.

Esto es, de hecho, un tipo de fecha y hora; Tuve que encasillar "stoptime" como:

var query = from p in dbTransSummary.Transaction_Logs 
    where ((DateTime) p.StopTime).Year == dtRollUpDate.Year 
    select 

Punto menor. ¡Funciona genial!