2016-11-03 1 views
0

Je recevais une liste d'objets comme celui-ci:obtenir des éléments d'un IEnumerable

IEnumerable personeller = (IEnumerable)sicil_model.OlayForm_Personel(); 

Je boucle à l'intérieur comme celui-ci

foreach (var personel in personeller) 
{ 
//can't do anything... 
} 

Je Looping l'intérieur personeller et je peux voir tous les éléments comme ceci

personeller[0] | { Id = 5, Kimlik = "Koray Durudoğan", EMail = "[email protected]", DepartmanAdi = "Yazilim", PozisyonAdi = "Yazilim Geliştirme" } 

personeller[1] | { Id = 6, Kimlik = "Hasan Pınar", EMail = "[email protected]", DepartmanAdi = "Yazilim", PozisyonAdi = "Yazilim Geliştirme" } 
    . 
    . 
    . 

Et va comme ça .. La chose est, je ne peux pas accéder à des éléments d'objets. Par exemple, comment puis-je obtenir Id de personeller [0] ou Kimlik de personeller [1]?

J'ai fait une classe comme cette

public class Personel_Form 
{ 
    public int Id { get; set; } 
    public string Kimlik { get; set; } 
    public string EMail { get; set; } 
    public string DepartmanAdi { get; set; } 
    public string PozisyonAdi { get; set; } 
} 

mais je ne pouvais pas réussi à convertir « personel » à cette classe, dans ma boucle foreach.

Enfin, voici la méthode qui transforme la liste:

public object OlayForm_Personel() 
    { 
     return (from p in Entity.GetEntity().Sicil 
          select new 
          { 
          Id = p.Id, 
          Kimlik = p.Isim + " " + p.Soyad, 
          EMail = p.EMail, 
          DepartmanAdi = p.Departman.DepartmanAdi, 
          PozisyonAdi = p.Pozisyon1.PozisyonAdi 
          }).ToList(); 
    } 
+0

quel est le type de retour de OlayForm_Personel? – Dom84

+0

Vous pouvez accéder à un index IEnumerable en utilisant 'ElementAt()' – Pikoh

+0

Quel est le type de retour d'origine de 'OlayForm_Personel'? Selon ce que vous obtenez, vous pouvez utiliser '.Cast () 'ou simplement' .ToList() ' –

Répondre

5

De votre phrase Je Looping l'intérieur personeller et je peux voir tous les éléments comme celui-ci et les données d'échantillon donné, je déduis que la collection renvoyée par la fonction stocke les éléments du type Personel_Form.

Deux options:

  1. Vous jettent dans le IEnumerable non génétique qui contient les éléments comme object s. vous pouvez lancer au type correct:

    IEnumerable personeller = (IEnumerable)sicil_model.OlayForm_Personel(); 
    
    foreach (var personel in personeller) 
    { 
        var personalForm = (Personel_Form)personel; 
        // personalForm.Kimlik 
    } 
    
  2. Mais une meilleure approche est: au lieu d'utiliser la IEnumerable non générique utiliser le IEnumerable<T> générique:

    IEnumerable<Personel_Form> personeller = sicil_model.OlayForm_Personel(); 
    

En ce qui concerne vos dernières erreurs (à partir des commentaires), c'est parce que votre fonction renvoie un type anonyme et non le Personel_Form ty pe. Au lieu de cela, si l'instanciation d'un objet anonyme instancier un Personel_Form:

public IEnumerable<Personel_Form> OlayForm_Personel() 
{ 
    return (from p in Entity.GetEntity().Sicil 
      select new Personel_Form 
      { 
      Id = p.Id, 
      Kimlik = p.Isim + " " + p.Soyad, 
      EMail = p.EMail, 
      DepartmanAdi = p.Departman.DepartmanAdi, 
      PozisyonAdi = p.Pozisyon1.PozisyonAdi 
      }).ToList(); 
} 
+0

Downvoter veuillez expliquer .. –

+0

Vous ne pouvez pas convertir le résultat de' OlayFrom_Personal' sans savoir ce qu'il retourne réellement. Edit: oh, désolé c'était l'autre réponse, la vôtre a dû apparaître presque en même temps. –

+1

@ManfredRadlwimmer - à partir des exemples de données dans la question, il est clair que chaque élément est du type de 'Personal_Form' –

0

Si son possible, vous pouvez changer votre méthode de

public object OlayForm_Personel() 
    { 
     return (from p in Entity.GetEntity().Sicil 
          select new 
          { 
          Id = p.Id, 
          Kimlik = p.Isim + " " + p.Soyad, 
          EMail = p.EMail, 
          DepartmanAdi = p.Departman.DepartmanAdi, 
          PozisyonAdi = p.Pozisyon1.PozisyonAdi 
          }).ToList(); 
    } 

à

public IEnumerable<Personel_Form> OlayForm_Personel() 
    { 
     return (from p in Entity.GetEntity().Sicil 
          select new Personel_Form 
          { 
          Id = p.Id, 
          Kimlik = p.Isim + " " + p.Soyad, 
          EMail = p.EMail, 
          DepartmanAdi = p.Departman.DepartmanAdi, 
          PozisyonAdi = p.Pozisyon1.PozisyonAdi 
          }).ToList(); 
    } 

alors vous pouvez changer votre code consommer à ce

var personeller = sicil_model.OlayForm_Personel(); 

foreach (var personel in personeller) 
{ 
    // personel.Kimlik 
}