查询使用LinqToSql的类

时间:2014-02-07 16:26:05

标签: c# asp.net linq-to-sql

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

     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);

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

1 个答案:

答案 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