C# 如何从IQueryable变量获取数据字段?
我有以下代码:-C# 如何从IQueryable变量获取数据字段?,c#,C#,我有以下代码:- public IQueryable GetPerson(int PersonID) { var Details = from pers in db.People where pers.ID == PersonID select new { Name = item.NAME
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对象获取字段数据,您有什么想法吗?实际上,您不能以任何有用的方式从方法返回匿名类型。方法将编译并工作,但实际上您有一个IQueryable对象集合,并且无法访问其中包含的匿名类型的属性。除非返回
IQueryable
,否则无法访问返回对象的属性,匿名类型仅在创建的范围内有效。也许你可以用反射来做一些可怕的事情来获取数据,但我不建议你这样做。为什么不想返回IQueryable
?问题在于IQueryable
是一个集合:在本例中是IQueryable
或类似的集合
尝试使用IEnumerable
作为返回类型,然后执行以下操作:
IEnumerable foundPerson = dal.GetPerson(personId);
string PersonEmail = foundPerson[0].Email;
注意:您也可以使用IQueryable
来实现这一点:我从未尝试过,目前我也没有查看接口文档
更正:因为GetPerson()
是它自己的方法,所以您确实丢失了匿名类型,只得到了一个对象。纠正这种情况的简单方法是使用命名类型(类或结构),尽管显然有一些黑客(不推荐)允许您绕过这种情况
另一种选择可能是
Lambda表达式
,它将根据具体情况提取所需的数据,但随后可能会有大量代码重复。我可以想出两种选择:
- 如果您的项具有与您将要使用的相同的名为的核心属性,则创建一个抽象类,并让您的方法返回一个IQueryable项
- 返回字典中的项,而不是单独返回,这样您就可以访问所需的名称及其关联值