6

我正在使用 LINQ to entity 返回对象列表

            var st = personsList.Select(p => new
            {
                ID = p.Id,
                Key = p.Key,
                Name = p.Name,
                Address = p.Address,
                City = p.City,
                PhoneNumber = p.PhoneNumber
            })
            return st.ToList();

在我获得另一个班级的列表后,我如何访问每个属性?

就像是

foreach(object s in St)
{
    string name = s.Name;
}

我没有预定义的类来将对象转换为它。

这可以在不必创建类并将对象转换为该类类型的情况下完成吗?

谢谢

4

4 回答 4

10

你在使用 C# 4 吗?您可以尝试使用dynamic

foreach(dynamic s in St)
{
    string name = s.Name;
}

当然,风险在于,如果您尝试访问对象没有的属性,您只会在运行时发现。

顺便说一句,在这种情况下,实际创建一个具有所有这些属性的类不是更有意义吗?您显然在多个地方都需要它们,并且您将获得类型安全和编译时错误的好处。

于 2012-04-17T09:12:50.583 回答
5

你可以使用以下

foreach(object s in St)
{
   Type type = s.GetType();
   PropertyInfo property = type.GetProperty("Name");
   if(property !=null)
   {
       string name= (string )property.GetValue(s, null);
   }
}

您必须将命名空间 System.Reflection 添加到类

于 2012-04-17T09:19:14.623 回答
0

C# 3.0 具有var允许隐式转换的类型。

于 2012-04-17T09:16:37.553 回答
0

编译器正在为您创建一个可以在方法范围内使用的匿名类型。如果您需要传递 LINQ 查询的结果,那么最好创建一个域对象来表示该信息,例如 PersonSummary,并将查询结果分配给它。C# 是强类型的利用这一点。

于 2012-04-17T09:17:22.433 回答