获取 IEnumerable 的元素

Get elements of an IEnumerable

我正在获取这样的对象列表:

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

我像这样在里面循环

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

我在里面循环 personeller 我可以看到所有这样的元素

personeller[0] | { Id = 5, Kimlik = "Koray Durudoğan", EMail = "koray@outlook.com", DepartmanAdi = "Yazilim", PozisyonAdi = "Yazilim Geliştirme" }

personeller[1] | { Id = 6, Kimlik = "Hasan Pınar", EMail = "hasan@dincerelektronik.com.tr", DepartmanAdi = "Yazilim", PozisyonAdi = "Yazilim Geliştirme" }
    .
    .
    .

然后是这样的。问题是,我无法访问对象的元素。例如,如何获取 personeller[0] 的 Id 或 personeller[1] 的 Kimlik?

我做了一个class这样的

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; }
}

但我无法在我的 foreach 循环中将 'personel' 转换为这个 class。

最后,转表的方法如下:

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();
    }

从你的句子 我在 personeller 中循环,我可以看到所有像这样的元素 和给定的样本数据我推断函数返回的集合存储了Personel_Form 类型。

两个选项:

  1. 您正在将其投射到持有 object 项。您可以将其转换为正确的类型:

    IEnumerable personeller = (IEnumerable)sicil_model.OlayForm_Personel();
    
    foreach (var personel in personeller)
    {
        var personalForm = (Personel_Form)personel;
        // personalForm.Kimlik
    }
    
  2. 但更好的方法是:不要使用非泛型 IEnumerable,而是使用泛型 IEnumerable<T>:

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

至于你最近的错误(来自评论)是因为你的函数 returns 是匿名类型而不是 Personel_Form 类型。相反,如果实例化一个匿名对象实例化一个 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();
}

如果可能的话,你可以改变你的方法

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();
    }

那么你可以将你的消费代码改成这个

var personeller = sicil_model.OlayForm_Personel();

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