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

Silverlight Discussion :

[WCF RIA Services] Pourquoi IQueryable<T> retourne un seul objet ?


Sujet :

Silverlight

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 39
    Points : 48
    Points
    48
    Par défaut [WCF RIA Services] Pourquoi IQueryable<T> retourne un seul objet ?
    Bonjour,

    J'ai créer un Empty Domain Service retournant des modèles que je génère à partir d'un fichier XML que je télécharge :

    Code c# : 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
     
        // SERVER SIDE
        [EnableClientAccess()]
        public class : DomainService
        {
            public IQueryable<UField> GetUFields(string url)
            {
                XDocument document = XDocument.Load(url);
     
                List<UField> result = new List<UField>();
     
                int i = 0;
                foreach (XElement field in document.Root.Elements("field"))
                {
                    result.Add(new UField(i, field.Element("alias").Value, field.Element("type").Value));
                    i++;
                }
     
                return result.AsQueryable();
            }
        }

    Dans result, j'ai une trentaine de résultat.

    Du côté client, je n'en récupère qu'un... :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            public void UneMethode()
                operation = _context.Load(_context.GetUFieldsQuery(url));
                operation.Completed += new EventHandler(operation_Completed);
            }
     
            void operation_Completed(object sender, EventArgs e)
            {
                IEnumerable<UField> test = _context.UFields;
            }

    A ce moment, dans test je n'ai qu'un seul objet.

    Est-ce que quelqu'un a une idée pourquoi je ne récupère pas tous mes objets ?

    Merci d'avance,

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Tu as essayé:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void UneMethode()
                operation.Completed += new EventHandler(operation_Completed);
                operation = _context.Load(_context.GetUFieldsQuery(url));
                        }
     
            void operation_Completed(object sender, EventArgs e)
            {
                IEnumerable<UField> test = _context.UFields;
            }

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 39
    Points : 48
    Points
    48
    Par défaut
    Avec ton code, la ligne retourne une erreur (variable operation est à null).

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    operation.Completed += new EventHandler(operation_Completed);

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Et ca ?

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void UneMethode()
                _context.Load(_context.GetUFieldsQuery(url)).Completed += new EventHandler(operation_Completed);;
                        }
     
            void operation_Completed(object sender, EventArgs e)
            {
                IEnumerable<UField> test = _context.UFields;
            }

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 39
    Points : 48
    Points
    48
    Par défaut
    Toujours pas...

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Et si tu essaies avec quelque chose comme ça ?

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    IEnumerable<UField> test;
     
    _context.Load<UField>(context.GetUFieldsQuery(), loadOperation =>
    {
        test = loadOperation.Entities.AsEnumerable();
    }
    , null);

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 39
    Points : 48
    Points
    48
    Par défaut
    Trouvé !

    Le problème venait au niveau de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result.Add(new UField(i, field.Element("alias").Value, field.Element("type").Value));
    Dans mon constructeur j'avais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            [Key]
            public int ID { get; set; }
     
            public string Alias { get; set; }
     
            public UFieldEnum Type { get; set; }
     
     
            public UField(int id, string alias, string type)
            {
                this.Alias = alias;
                this.Type = ConvertType(type);
            }
    Dans mon constructeur, je n'assignais pas ID à l'objet crée. Du coup, avec la méthode de Matt07, je récupérer une trentaine de fois le même objet.
    Il suffit donc d'ajouter this.ID = id; dans le constructeur et toutes les méthodes proposées fonctionnent.

    Merci de votre aide,

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

Discussions similaires

  1. Réponses: 27
    Dernier message: 11/08/2011, 22h12
  2. WCF RIA Services
    Par Kais. dans le forum Silverlight
    Réponses: 3
    Dernier message: 26/04/2010, 21h40
  3. Réponses: 6
    Dernier message: 22/12/2009, 21h11

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