我想将以下代码单独放在一个类中,以便我可以重用它:
var activePersons = (from p in _dataContextOrders.Persons
select new
{
p.ID,
p.WindowsUserID,
p.Name,
p.CommonShortName,
p.TeamID,
p.Telephone,
p.Fax,
p.Email,
p.FMSBudgetOfficerID,
p.Active
}).Where(p => p.Active).OrderBy(p => p.CommonShortName);
所以我可以返回Object activePersons。我会用这个代替所有这些:
var activePersons = DataAccessLayer.ActivePersons.GetActivePersons();
但在页面的下方,我有这个:
var currentUser = activePersons.SingleOrDefault(p => p.WindowsUserID == strWindowsSessionUserId);
现在返回编译错误。有没有办法解决这个问题?
答案 0 :(得分:1)
您收到错误的原因是您在查询中使用new
关键字选择的匿名对象。您无法从方法中返回匿名对象,因此我猜您要返回object
。现在,对于您的方法调用者,它是一个object
类型对象,它不会公开在查询中选择的所有属性(并且您无法将其转换为类型,因为您不知道类型)因此错误。
您需要创建一个新类并使用所有属性并从方法返回IEnumerable<yourClass>
。
有一个way to return anonymous object mentioned by Jon Skeet,但他不推荐它。
定义一个类:
class ReturnedObject
{
public int ID { get; set; }
public string WindowsUserID { get; set; }
//..... rest of the properties
}
然后在您的查询中:
var activePersons = (from p in _dataContextOrders.Persons
select new ReturnedObject
{
ID = p.ID,
WindowsUserID = p.WindowsUserID,
//rest of the properties
在您的方法中将返回类型指定为:
public IEnumerable<ReturnedObject> GetActivePersons(//parameters