获取IEnumerable的元素

时间:2016-11-03 11:58:56

标签: c# 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]或者personler [1]的Kimlik的身份?

我做了这样的课程

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'转换为此类。

最后,以下是转换列表的方法:

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

2 个答案:

答案 0 :(得分:5)

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

两个选项:

  1. 你把它投入到非遗传的IEnumerable中 项目为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();
    
  3. 至于您的最新错误(来自评论),这是因为您的函数返回匿名类型而不是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();
    }
    

答案 1 :(得分:0)

如果可能,您可以从

更改方法
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
}