es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Linq to SQL DateTime contiene cadena.

Estoy intentando relacionar una cadena parcial proporcionada por el usuario con una fecha anulable utilizando linq to sql. Tengo que comprobar ciertos criterios, pero me aparece un error que dice que linq to sql no admite la función .ToString().

Código que he intentado:

query.where(x => x.myDate.HasValue && x.myDate.Value.ToString().Contains(searchValue);

También he intentado separarlo de esta manera:

query.where(x => x.myDate.HasValue && x.myDate.Value.Year.ToString().Contains(searchValue);

Lo que quiero es que el usuario pueda escribir una cadena parcial de fecha como “202” y que verifique si el año, mes o día contiene “202” en su valor (en este caso, filtrará y solo mostrará fechas en el año 2020, 2021, 2022, etc.).

El formato en el que espero que el usuario ingrese la fecha es 2020-06-01.

He probado varias variaciones y estoy bastante atrapado. Si pudiera hacer una coincidencia parcial en un entero, podría reorganizar el código para solucionarlo, pero no poder usar la función .ToString(“yyyy-MM-dd”) en la fecha que busca en la base de datos es muy limitante.

Agradecería cualquier ayuda que puedas proporcionar y he buscado preguntas similares en stackflow, pero no he encontrado una respuesta que pueda utilizar.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para hacer coincidir una cadena parcial proporcionada por el usuario con una fecha nullable utilizando Linq to SQL, puedes intentar lo siguiente:

    query.where(x => x.myDate.HasValue && x.myDate.Value.Year.ToString().Contains(searchValue) || x.myDate.Value.Month.ToString().Contains(searchValue) || x.myDate.Value.Day.ToString().Contains(searchValue));
    

    Esto filtrará la consulta para mostrar solo las fechas que contengan la cadena de fecha parcial ingresada por el usuario, ya sea en el año, mes o día.

    Sin embargo, mencionaste que estás obteniendo un error de que linq to sql no admite .ToString(). En ese caso, puedes intentar usar el método SqlFunctions.StringConvert en lugar del método .ToString. Tu código debería verse así:

    query.where(x => x.myDate.HasValue && SqlFunctions.StringConvert((double)x.myDate.Value.Year).Contains(searchValue) || SqlFunctions.StringConvert((double)x.myDate.Value.Month).Contains(searchValue) || SqlFunctions.StringConvert((double)x.myDate.Value.Day).Contains(searchValue));
    

    Ten en cuenta que la clase SqlFunctions está definida en el espacio de nombres System.Data.Linq.SqlClient, por lo que deberás incluir ese espacio de nombres en la parte superior de tu archivo.

Comments are closed.