我正在使用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;
}
我没有预定义的类来将对象强制转换为它。
这可以在不必创建类并将对象强制转换为该类类型的情况下完成吗?
由于
答案 0 :(得分:8)
您使用的是C#4吗?您可以尝试使用dynamic
:
foreach(dynamic s in St)
{
string name = s.Name;
}
当然,风险是,如果您尝试访问该对象没有的属性,您只能在运行时找到它。
顺便说一句,在这种情况下,实际创建一个具有所有这些属性的类是不是更有意义?您显然需要在几个地方使用它们,并且您将获得类型安全和编译时错误的好处。
答案 1 :(得分:3)
您可以使用以下
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添加到类
答案 2 :(得分:0)
C#3.0具有var
类型,允许隐式转换。
答案 3 :(得分:0)
编译器正在创建一个匿名类型,可以在方法范围内使用。如果你需要传递LINQ查询的结果,那么最好创建一个域对象来表示像PersonSummary这样的信息,并将查询结果分配给它。 C#是强类型的,利用它。