我对这究竟是如何运作有点困惑。我有一个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; }
}
答案 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组成。我