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 :

Ajout d'un champs calculé dans un "select new" de linq Data


Sujet :

Linq

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut Ajout d'un champs calculé dans un "select new" de linq Data
    Bonjour,
    Je débute en C#/Asp net et je suis totalement perdu sur certain points.

    Je sais créer une requête avec linqData, et me servire du résultat pour remplire une grille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
            SqlConnection oConnexion = new SqlConnection(ConfigurationManager.ConnectionStrings["MaBaseConnectionString"].ConnectionString);
            DataClassesDataContext db = new DataClassesDataContext();
            var GroupeLink = from P in db.Journals
                             select new
                             {
                                 IDJournal = P.IDJournal,
                                 LoginName = P.LoginName,
                                 IP = P.IP,
                                 CookiesSupported = P.CookiesSupported,
                                 IdUser = P.IdUser,
                                 Navigateur = P.Navigateur,
                                 Languages = P.Languages,
                                 DateDeb = P.DateDeb,
                                 Datefin = P.DateFin
                             };
     
            GridJournal.DataSource = GroupeLink;
            GridJournal.DataBind();
    Ce que je n'arrive pas a fair, c'est a ajouter un champs calculé en plus dans mon "select new"
    Pourriez vous m'aider ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bon, je ne semble pas avoir eu beaucoup de succès avec cette demande.

    Ce n'est pas très grave pour mois car j'ai trouvé une solution.

    Si cela inter esse quelqu'un voici ce que j'ai fait.

    Le select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
            var GroupeLink = from P in db.Journals
                             where
                             (
                               ((P.DateDeb > FiltreDeb) && (P.DateDeb < FiltreFin))
                                ||
                               ((P.DateFin > FiltreDeb) && (P.DateFin < FiltreFin))
                             )
                             select new
                             {
                                 IDJournal = P.IDJournal,
                                 LoginName = P.LoginName,
                                 IP = P.IP,
                                 CookiesSupported = P.CookiesSupported,
                                 IdUser = P.IdUser,
                                 Navigateur = P.Navigateur,
                                 Languages = P.Languages,
                                 DateDeb = P.DateDeb,
                                 Datefin = P.DateFin,
                                 Duree = ConstanteEtFonctions.ConstanteEtFonctions.CalcDuree(P.DateDeb, P.DateFin)
     
                             };
    Duree sera le champs calculé dans une fonction CalcDuree

    La fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
            static public string CalcDuree(
                  System.Nullable<System.DateTime> DateFin,
                  System.Nullable<System.DateTime> DateDeb)
            {
                if (DateFin == null) { return ""; }
                if (DateDeb == null) { return ""; }
                DateTime DFin = (DateTime)DateFin;
                DateTime DDeb = (DateTime)DateDeb;
                TimeSpan TheDuree;
                if (DFin > DDeb) 
                { TheDuree = DFin.Subtract(DDeb); }
                else
                { TheDuree = DDeb.Subtract(DFin); }
                return String.Format(FormatDuree, TheDuree.Days, TheDuree.Hours, TheDuree.Minutes, TheDuree.Seconds);
            }
    la seule astuce consite a declare les date de debut et de fin en tant que : System.Nullable<System.DateTime>

    les datetime n'étant pas nullable, le C# les remplace par un type construit a la volé pour la requête.

    Pour trouver le bon type à utiliser, j'ai placer le curseur de la souris sur P.DateDeb, j'ai fais un click droit et j'ai utiliser la fonction "go to definition" du menu surgissant.

    Si quelqun à une problème similaire, j'espère que cela l'aidera.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/03/2013, 17h18
  2. Réponses: 3
    Dernier message: 25/05/2008, 15h16
  3. [Requête/SQL]ajouter un champ calculé dans une table
    Par zougna dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 17/04/2007, 19h09
  4. Recuperer un champ calculé dans une variable....
    Par vijeo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/12/2004, 14h57

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