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 :

GROUP BY HAVING MIN(DATEDIFF())


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 44
    Par défaut GROUP BY HAVING MIN(DATEDIFF())
    Bonjour, je cherche à traduire cette requête en Linq sans succès hélas...
    Pouvez vous m'aider ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DELETE FROM ShoppingCart
    WHERE CartID IN
    (SELECT CartID
     FROM ShoppingCart
     GROUP BY CartID HAVING MIN(DATEDIFF(dd,DateAdded,GETDATE())) >= @Days)
    Voici également la signature de ma méthode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static bool DeleteOldCarts(byte days)
    Le byte days correspond au paramètre Days de la requête.

    Voici ce que j'ai fait jusqu'à présent :
    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
    23
    24
    25
    26
        public static bool DeleteOldCarts(byte days)
        {
            using (var ctx = new BalloonShopDataContext())
            {
                var queryShoppingCart = from a in ctx.ShoppingCart
                                        where
                                            (from shoppingcart0 in ctx.ShoppingCart
                                             group shoppingcart0 by new { shoppingcart0.CartID } into g
                                             select new { g.Key.CartID }).Contains(new { a.CartID }) &&
                                             DateTime.Now.Subtract(a.DateAdded).Days > Convert.ToInt32(days)
                                        select a;
     
                try
                {
                    foreach (var del in queryShoppingCart)
                        ctx.ShoppingCart.DeleteOnSubmit(del);
     
                    ctx.SubmitChanges();
     
                    return true;
                }
                catch
                {
                    return false;
                }            
            }


    Merci d'avance

  2. #2
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Ce n'est sans doute pas la réponse que tu attends, mais pour faire un DELETE de ce type, je ne vois pas bien l'intérêt de traduire en Linq, autant utiliser une procédure stockée.

    Linq c'est bien pour faire des select à la volée, pour les delete de masse c'est pas vraiment ça...

  3. #3
    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
    Ce n'est sans doute pas la réponse que tu attends, mais pour faire un DELETE de ce type, je ne vois pas bien l'intérêt de traduire en Linq, autant utiliser une procédure stockée.

    Linq c'est bien pour faire des select à la volée, pour les delete de masse c'est pas vraiment ça...
    Tout a fait... vos performances seront bien meilleur...

    DELETE FROM ShoppingCart
    WHERE CartID IN
    (SELECT CartID
    FROM ShoppingCart
    GROUP BY CartID HAVING MIN(DATEDIFF(dd,DateAdded,GETDATE())) >= @Days)
    Au passage j'aurais personnelement fait çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DELETE 
    FROM ShoppinCart
    WHERE EXISTS(SELECT *
                         FROM ShoppinCart SC
                         WHERE SC.CartID =ShoppinCart.CartID 
                            AND DATEDIFF(dd,SCDateAdded,GETDATE())>=@Days

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/07/2008, 18h05
  2. Select / Group by / Having
    Par jnauche dans le forum SQL
    Réponses: 3
    Dernier message: 14/05/2008, 11h09
  3. regroupement GROUP BY.HAVING et critères
    Par garsflo dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 17/10/2007, 12h11
  4. comment traduire un "group by/having" dans une query
    Par cau83 dans le forum Alimentation
    Réponses: 1
    Dernier message: 05/06/2007, 09h05
  5. [SQL] Group by + SUM + Min
    Par Deejoh dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/11/2006, 15h46

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