C# 关于使用具有LinqToSql的类的查询

C# 关于使用具有LinqToSql的类的查询,c#,asp.net,linq-to-sql,C#,Asp.net,Linq To Sql,我想将以下代码单独放入一个类中,以便可以重用它: var activePersons = (from p in _dataContextOrders.Persons select new { p.ID, p.WindowsUserID,

我想将以下代码单独放入一个类中,以便可以重用它:

     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);
所以我可以返回对象activePersons。我想用这个来代替所有这些:

    var activePersons = DataAccessLayer.ActivePersons.GetActivePersons();
但在下一页,我有:

    var currentUser = activePersons.SingleOrDefault(p => p.WindowsUserID == strWindowsSessionUserId);

现在返回一个编译错误。有办法解决这个问题吗?

出现错误的原因是您在查询中使用
new
关键字选择了匿名对象。您无法从方法返回匿名对象,因此我猜您正在返回
object
。现在,对于您的方法调用方,它是一个
对象
类型对象,并且它不会公开查询中选择的所有属性(并且您无法将其转换为类型,因为您不知道该类型),因此会出现错误

需要创建一个新类,该类包含所有属性,并从方法返回
IEnumerable

有一种方法,但他不推荐

定义一个类,如:

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
public IEnumerable GetActivePersons(//参数

您会遇到什么错误?您接受了错误的答案。如果您对该问题使用了正确的答案,您就不会处于这种情况。谢谢您的帮助。我最终成功了。大家都可以干编程了!!@Stevestamp,不客气,但您接受了关于类似主题的先前问题的答案。