IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linq Discussion :

Filtrer les résultats d'une requête par date courte


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2006
    Messages : 79
    Par défaut Filtrer les résultats d'une requête par date courte
    Bonjour,

    J'effectue une requête avec filtrage (clause where) sur la date.
    Mais je souhaite filtrer que sur la doute courte (ex : 27/07/2011) , et non pas sur la date longue (ex : 27/07/2011:13:08:00).

    J'utilise Linq To Entites, avec la version beta d'Oracle.Net (ODAC 11.2.0.2.30 ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    List<ContratsIntellect> maListeContratsIntell = (from intellFrontOffice in t_IntellFrontOffice
                where intellFrontOffice.TRANSACT_DATE.Value.ToShortDateString() == dateBooking.ToShortDateString()
                    select new ContratsIntellect
                    {
                        i_User_Ref_No = intellFrontOffice.REF_NUM,
                        i_Amt_Sold = intellFrontOffice.AMT_SOLD,
                        i_Ref_Num = intellFrontOffice.REF_NUM,
                        i_Transac_Date = intellFrontOffice.TRANSACT_DATE
                    }).ToList();
    Mais quand je convertit les champs date de type DateTime en , j'ai une erreur à l'exécution :
    LINQ to Entities ne reconnaît pas la méthode « System.String ToShortDateString() », et cette dernière ne peut pas être traduite en expression de magasin.
    Une idée ?

  2. #2
    Membre chevronné Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Par défaut
    C'est pas plus mal que ça ne marche pas car ce serait de toute façon un mauvais choix pour des raisons de performance. Si tu avais un index sur ta colonne Date il ne serait très certainement (...j'ai jamais utilisé oracle) pas utilisé.
    Si l'idée était de resortir tous les élements datés du 27/07/2011 00:00:00 compris jusqu'au 28/07/2011 00:00:00 non compris essaie plutôt de faire quelque chose de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DateTime dateMin = new DateTime(2011,07,27);
    DateTime dateMax = dateMin.AddDays(1);
     
    ...
    (intellFrontOffice.TRANSACT_DATE.Value >= DateMin && intellFrontOffice.TRANSACT_DATE.Value < Datemax)
    ...
    EDIT : pour mieux comprendre, essaie d'imaginer le code SQL que va devoir générer Linq To Entites pour communiquer ta demande à Oracle

    Pascal

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Par défaut
    Essaye la chose suivante WHERE MonChamp.Date = MaVariable.Date

  4. #4
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Essaye la chose suivante WHERE MonChamp.Date = MaVariable.Date
    hum... cela ne marche pas non plus...

    Herwin78800:Vous faites une requete LINQ TO SQL ici:
    .toshortDateString n'est pas utilisable en LINQ TO SQL car non traduisible en requete SQL...
    Essayez quelques chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    datetime date1=dateBooking.Date;
    datetime date2=dateBooking.Date.AddDay(1);
    List<ContratsIntellect> maListeContratsIntell = (from intellFrontOffice in t_IntellFrontOffice
                where intellFrontOffice.TRANSACT_DATE.Value>=date1 &&   intellFrontOffice.TRANSACT_DATE.Value<date2
                  select new ContratsIntellect
                    {
                        i_User_Ref_No = intellFrontOffice.REF_NUM,
                        i_Amt_Sold = intellFrontOffice.AMT_SOLD,
                        i_Ref_Num = intellFrontOffice.REF_NUM,
                        i_Transac_Date = intellFrontOffice.TRANSACT_DATE
                    }).ToList();

  5. #5
    Membre chevronné Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Par défaut
    pas utilisable en LINQ TO SQL car non traduisible en requete SQL...
    Sur certain SGBDR ça pourrait se traduire en SQL. Dans SQL Server ça donnerait quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT REF_NUM, AMT_SOLD, REF_NUM, TRANSACT_DATE 
    FROM t_IntellFrontOffice
    WHERE (CONVERT(CHAR(10), TRANSACT_DATE, 103) = '27/07/2011')
    ... mais alors par contre bonjour les perfs

    Pascal

  6. #6
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Pascal: vous n'avez pas compris ce que j'entendais par "non traduisible en requête SQL".
    Bien sur qu'une telle requête existe!
    Pour SQL SERVER 2008 un CAST en DATE(dépourvu de time) serait plus adapté...
    Mais ici on est en LINQ TO SQL et ToShortDateString n'est pas supporté...

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2006
    Messages : 79
    Par défaut Effectivement cela fonctionne
    Citation Envoyé par _PascalC_ Voir le message
    DateTime dateMin = new DateTime(2011,07,27);
    DateTime dateMax = dateMin.AddDays(1);

    ...
    (intellFrontOffice.TRANSACT_DATE.Value >= DateMin && intellFrontOffice.TRANSACT_DATE.Value < Datemax)
    ...
    Effectivement, ecrit de cette facon, cela fonctionne. Merci

    Petite precision : je suis en Linq To Entities et non pas en Linq To Sql

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 16/08/2012, 12h33
  2. Sélectionner les résultats d'une requête par date
    Par 0sef40 dans le forum Langage SQL
    Réponses: 16
    Dernier message: 19/05/2011, 08h38
  3. filtrer les résultats d'une requête SQL
    Par Abbeille dans le forum ADO.NET
    Réponses: 8
    Dernier message: 21/03/2011, 10h32
  4. Filtrer les résultats d'une requête
    Par bilbot dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/02/2011, 16h41
  5. [MySQL] Afficher les résultats d'une requête par nombre de caractères
    Par goldenb dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/08/2010, 01h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo