Estoy trate de obtener la lista de usuarios el uso de EF. y tengo la presentada en la tabla es la fecha de regreso como un tipo de datos de cadena. Ahora estoy comparar esta fecha de regreso a la fecha de Hoy estoy recibiendo el error.de tal manera que cualquier idea de cómo puede hacer que convertir la cadena a datetime en C#.

Aquí está la consulta:

var res = db.users
  .Where(a => Convert.ToDateTime(a.returndate) > DateTime.Now)
  .ToList(); //but here not getting list

Por lo que es posible en EF cadena de fecha de conversión. Si alguien tiene una idea por favor hágamelo saber.

  • ¿Cuál es el valor de a.returndate?
  • DD-MM-AAAA este formato es de la tienda
  • no debe ser DD-MM-AAAA en lugar de DD-MM-AAAA?
  • «estoy recibiendo el error» – ¿qué error? ¿Y usted tiene que utilizar una representación de texto en la base de datos para comenzar? Si pudiera cambiar la base de datos de uso más sensato de tipo de campo, el código de todos los que tratan con él, es probable, mejor…
InformationsquelleAutor coderwill | 2017-04-25

4 Comentarios

  1. 6

    No se puede utilizar Convert.ToDatetime método en LINQ to Entities, así que primero obtener datos de db, a continuación, utilice el método en la lista

    var res = db.users.ToList().Where(a => DateTime.ParseExact(a.returndate,"dd-MM-yyyy",CultureInfo.InvariantCulture) > DateTime.Now).ToList();

    NOTA: Si usted puede cambiar su columns data type a DateTime tipo, a continuación, usted puede compararlos en LINQ To Entities, de lo contrario se debe hacer por encima de

    • con la solución que me estoy poniendo como este error ‘de la Cadena, no fue reconocido como válido DateTime’.
    • He editado mi respuesta, intente con formato
    • obtención de toda la tabla para filtrar los datos dentro de la aplicación es mala práctica
    • tu tienes razón, si esta tabla contiene muy grande de datos
    • así que chicos ¿cuál es el mejor onda para que el problema a solucionar?
    • si su tabla de usuarios no contiene datos de gran tamaño, a continuación, utilizando esto no causa problema de rendimiento
    • Vishals respuesta no trabajando, creo, porque no se puede acceder a las listas de objeto desde fuera
    • la mejor manera de solucionar este problema es tener el tipo correcto de datos en la base de datos de la columna. La mejor manera será utilizar la fecha como una cadena en formato ISO (aaaa-MM-dd HH:mm:ss), así que usted puede comparar por lo menos a la representación de texto sin necesidad de conversión.
    • Como @Dirk dijo que la mejor manera es almacenar los datos en la db como Datetime, a continuación, puede comparar en LINQ to entities, sin convertir
    • sí, pero ahora el tiempo se me requiere como una cadena de caracteres que ¿por qué estoy tomando cadena la próxima vez será la atención
    • Turgunbaev esta tabla de usuarios almacenar gran cantidad de datos así que voy por la onda de la consulta es muy lento trabajo para cualquier otra manera para que?
    • parece que no hay otra manera hasta que usted cambie el tipo de datos de la columna en la base de datos
    • ok gracias chicos por la ayuda y me dan más sugerencias sobre este tema.
    • sí, su onda es 100% correcto, pero en mi mesa un montón de datos que el tiempo es la actuación de la ley así que no estoy acostumbrado.

  2. 3

    Como por sus comentarios a la pregunta que usted necesita hacer

    var res = db.users.ToList().Where(a => DateTime.ParseExact(a.returndate, "dd-MM-yyyy", CultureInfo.InvariantCulture) > DateTime.Now);

    En su caso Convert.ToDateTime(string str) no está funcionando como pasa DateTime formato es diferente a la de su Sistema de formato.

    Por CIERTO,

    ….EF string DateTime conversión.

    Nunca jamás tienda DateTime cadenas en la base de datos. Las bases de datos correspondientes tipos DateTime donde se puede almacenar información como DateTime sí mismo. De esa manera cuando se aporta valores que usted no tiene que repetir el código.

    • Son u seguro de que esto funcionará? Con LINQ to entities?
    • LINQ to entities no reconoce el método » del Sistema.DateTime ParseExact(Del Sistema.De Cadena, Sistema.De Cadena, Sistema.IFormatProvider)’ y este método no puede ser traducido en una tienda de expresión. i m de obtener este error.
    • Respuesta actualizada.
    • Gracias chicos para darse cuenta.
    • Por desgracia, la adición de la ToList() llamar a las fuerzas de la SQL a ejecutar y el Where() se realiza en el código.
    • Sí. Que la Inmediata Ejecución de la Consulta (lo contrario de aplazamiento de la Ejecución de la Consulta que LINQ hace). OP también está haciendo ToList() en su pregunta. Hay una pregunta en este?

  3. 0

    Intente Esto :

    var res = db.users.where(a => DateTime.ParseExact(a.returndate,"dd-MM-yyyy",CultureInfo.InvariantCulture) > DateTime.now).ToList();
    • DateTime.ParseExact no se tradujo en una instrucción sql
  4. 0

    Con el esquema actual sólo se puede obtener la lista de todos los objetos y luego filtrarla.

    Linq to entities construcciones de la consulta SQL que se ejecuta cuando la enumeración que se hace.

    Así que acaba de obtener la lista completa, luego filtrarla. O el cambio de esquema de base de datos es muy recomendable.

    ACTUALIZACIÓN

    var res = db.users.ToList().Where(a => DateTime.ParseExact(a.returndate, "dd-MM-yyyy", CultureInfo.InvariantCulture) > DateTime.Now); 

    Pero completo de la tabla se carga antes de la filtración. Así que la necesidad de u para cambiar su campo de tipo datetime. Entonces u puede utilizar la simple comparación dentro de Where.

    @NikhilAgrawal también ha actualizado su respuesta de una manera correcta. )

    • puede usted por favor me dan idea de cómo puede hacer eso
    • sí, esta onda es correcto, pero en mi mesa un montón de datos de la tienda para que el tiempo esta consulta es un trabajo muy lento, así que cualquier otra solución??
    • He mencionado – cambio de campo de tipo datetime, la única manera.

Dejar respuesta

Please enter your comment!
Please enter your name here