我有以下代码: -
public IQueryable GetPerson(int PersonID)
{
var Details = from pers in db.People
where pers.ID == PersonID
select new
{
Name = item.NAME,
Email = item.EMAIL
};
return Details
}
我不想从上面的数据访问代码返回特定的类型。
然后我想做类似的事情:
IQueryable Person = dal.GetPerson(PersonID);
PersonEmail = Person.EMAIL; - but this obviously doesn't work ??
关于如何从Person IQueryable对象获取字段数据的任何想法?
答案 0 :(得分:2)
实际上,您无法以任何有用的方式从方法返回匿名类型。您的方法将编译和工作,但您基本上有一个IQueryable对象集合,您不能访问其中包含的匿名类型的属性。除非您返回IQueryable<Person>
,否则您无法访问返回对象的属性,因此匿名类型仅在创建它们的范围内非常有用。可能有些可怕的事情你可以用反射来获取数据,但我不会建议沿着那条路走下去。为什么你不想退回IQueryable<Person>
?
答案 1 :(得分:0)
我可以想到两种选择:
答案 2 :(得分:-2)
问题是IQueryable
是一个集合:在这种情况下IQueryable<[annonymous]>
或类似的东西。
尝试使用IEnumerable
作为返回类型,然后执行:
IEnumerable foundPerson = dal.GetPerson(personId);
string PersonEmail = foundPerson[0].Email;
注意:您也可以使用IQueryable
执行此操作:我从未尝试过,而且我现在还没有查看该界面的文档。
更正:由于GetPerson()是它自己的方法,你确实会丢失你的匿名类型并只返回一个Object。解决这个问题的简单方法是使用命名类型(类或结构),但显然有一些黑客(不推荐)允许你绕过它。
另一个选项可能是Lambda表达式,它会根据具体情况撤回所需的数据,但是你可能会有相当多的代码重复。