none
Requetes sucessives

    Question

  • Bonjour à tous,

    je créé une requete qui me retourne un objet

    ex :

    dim Retour = From  E In myDC.Entites _

                             Join FC In myDC.LFacturations On FC.IdE Equals E.Id _

                             Select New ObjRetour(E.Id, E.Nom, E.Prenom, FC.Id, FC.DateFact, FC.Total, 0, FC.ModeFact, FC.Valid)

    Dans Retour, tel quel, j'ai 20.000 lignes. mais je ne veut pas tout !       

    If ValidOnly Then Retour = (From ligne In Retour Where ligne.Valid)

    if m>0 then Retour = (From ligne In Retour Where ligne.ModeFact=m)

    Le problème, c'est que j'ai une erreur : Le membre 'ObjRetour.Valid' ne prend pas en charge la traduction en SQL.

    J'ai bien une solution qui consiste à récupérer mes 20000 lignes, puis à trier, mais récupérer 20000 lignes quand on ne va en afficher au final que 200, c'est vraiment trop bête, non

    vendredi 18 mars 2011 08:39

Toutes les réponses

  • Bonjour,

     

    Le membre “Valid” de l’objet ObjRetour est-il de type bool? Avez-vous essayé de faire « where ligne.Valid == true » ?

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     


    Suivez MSDN sur Twitter 

    vendredi 18 mars 2011 11:17
  • Si je fait la ligne du dessous, j'ai un probleme equivalent. En fait, le probleme semble venir du fait que je peux faire des requetes successives sur une table, mais lorsque je dois faire une jointure, et donc créer un nouvel objet, les requetes sucessives ne fonctionnent plus.

    exemple :

    dim Retour = From  E In myDC.Entites Select E (environ 20000 lignes)
    If ValidOnly Then Retour = (From ligne In Retour Where ligne.Valid)

    ça fonctionne et ça ne retourne bien que 200 lignes (très rapide).

    mais dans ma requête du départ, je n'y arrive pas...


    Bruno
    vendredi 18 mars 2011 13:38
  • En Linq tu peux utiliser .Skip(<Ton nbr d'items à sauter­>).Take(200)

    Bien utile pour faire du paging


    Microsoft MVP C# || gabrielmongeon.com || LinkedIn
    mardi 17 mai 2011 12:43
  • Bonjour,

    Je pense que le problème est lié à la "projection" faite trop tôt qui crée un objet ObjRetour qui n'a sans doute aucune correspondance dans le modèle EF (et qui donc ne pourra pas faire l'objet d'une requête SQL).

    Donc :
    - créer Retour sans le select new de façon à retourner toujours des entités du modèle conceptuel de la base de données
    - compléter la requête
    - et seulement faire le new ObjRetour(etc...)

    En gros cela donnerait qq chose comme :

    dim Retour = From  E In myDC.Entites _
                             Join FC In myDC.LFacturations On FC.IdE Equals E.Id
    If ValidOnly Then Retour = From ligne In Retour Where ligne.Valid
    if m>0 then Retour = From ligne In Retour Where ligne.ModeFact=m
    Dim q=From Ligne in Retour Select New ObjRetour(E.Id, E.Nom, E.Prenom, FC.Id, FC.DateFact, FC.Total, 0, FC.ModeFact, FC.Valid)

    Notez qu'à la dernière étape j'utilise une nouvelle variable pour la requête finale (Retour et Q ne retournent pas le même type d'objet, donc je peux me baser sur Retour pour faire la requête finale mais je ne peux pas la réaffecter à la variable Retour).

    En résumé l'astuce est de sélectionner les colonnes en dernier après avoir compléter graduellement la requête.

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 17 mai 2011 17:21
  • Bonjours

    Si le probleme reside dans la performance des requetes if faut essayer le PLINQ au lieu du LINQ

     

    http://msdn.microsoft.com/fr-FR/library/dd460688.aspx

     


    The complexity resides in the simplicity Follow me at: http://smartssolutions.blogspot.com
    mardi 24 mai 2011 21:27