IEnumerable to Object?

时间:2016-11-16 22:08:15

标签: c# entity-framework-6

我对这究竟是如何运作有点困惑。我有一个IEnumerable<T>列表,我从mySQL数据库中的存储过程中提取。

       IEnumerable<CheckInVar> CheckInVars = context.Database.SqlQuery<CheckInVar>(
          "Call getCheckinVars(\"WEB\")").ToList();

现在,我是否需要遍历此对象以提取属性以便我可以使用它们?

foreach (var prop in CheckInVars.GetType().GetProperties())
        {

            Console.WriteLine("{0} = {1}", prop.Name, prop.GetValue(CheckInVars, null));
        }

或者我可以直接使用IEnumberable<CheckInVar>对象,还是需要将其转换为使用它?

public class CheckInVar
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Column("ID")]
    public int ID { get; set; }
    public string Code { get; set; }
    public string VarValue { get; set; }
    public string AccessMethod { get; set; }
    public string Active { get; set; }
    public string DateCreated { get; set; }
    public string DateUpdated { get; set; }
    public string UpdatedBy { get; set; }
}

3 个答案:

答案 0 :(得分:2)

尝试使用foreach:

IEnumerable<CheckInVar> CheckInVars = context.Database.SqlQuery<CheckInVar>(
    "Call getCheckinVars(\"WEB\")").ToList();

foreach(CheckInVar item in CheckInVars)
{
    Console.WriteLine("ID: " + item.ID.ToString());
    Console.WriteLine("Code: " + item.Code);
    Console.WriteLine("VarValue: " + item.VarValue);
    //....
}

答案 1 :(得分:1)

如果您出于某种原因希望通过反射访问每个集合(IEnumerable)项目的属性,那么您将必须遍历IEnumerable并依次处理每个项目。

使用您的示例:

foreach(var checkInVar in CheckInVars)
{
    foreach(var prop in checkInVar.GetType().GetProperties())
    { 
        Console.WriteLine("{0} = {1}", prop.Name, prop.GetValue(checkInVar)); 
    }
}

正如其他人所说,反思真的有必要吗?你不能直接访问这些属性吗?

我猜你可能正在使用反射来允许更改CheckInVar类型而无需更改处理代码。

答案 2 :(得分:0)

要回答这个问题,&#34;我是否需要遍历此对象&#34;答案是肯定的。但正如艾米解释的那样,还有更好的方法。

请注意,CheckInVars可能由无或多个Checkinvar组成。我