如何使IQueryable <out t =“”>使用常规IQueryable?</out>

时间:2010-10-14 13:12:17

标签: linq lambda iqueryable

我正在使用Linq2SQL并使用遗留系统。该系统是在.Net中构建的,但是没有数据层,所以我对它进行转码,以便它有一个。我有一个看起来像这样的linq查询...

 var data = from p in db.tblPeoples
                   orderby p.strLastName,p.strFirstName
                   select new
                   {
                       guidPersonId = p.guidPersonId,
                       strFirstName = p.strFirstName,
                       strLastName = p.strLastName,
                       strRank = p.tblCodesRank.strDescription,
                       strPhone = p.strPhone,
                       strEmail = p.strEmail,
                       strOffice = p.tblOrganization.strAcronym,
                       RolesList = p.tblRoles
                   };

当我检查var的签名时,它是一个IQueryable,我不知道那是什么。在我的数据层中,我将其作为IQueryable返回,但是当我尝试使用数据层版本然后在返回的数据集上执行.where来搜索它时,我得到的错误是我无法将lambda表达式转换为键入'string',因为它不是代表类型。

我该怎么办?我正在尝试创建代码重用并使用已编写的数据层版本。数据层版本如下所示:

public static IQueryable RetrieveAllPeople()
{
            var data = from p in db.tblPeoples
               orderby p.strLastName, p.strFirstName
               select new
               {
                   guidPersonId = p.guidPersonId,
                   strFirstName = p.strFirstName,
                   strLastName = p.strLastName,
                   strRank = p.tblCodesRank.strDescription,
                   strPhone = p.strPhone,
                   strEmail = p.strEmail,
                   strOffice = p.tblOrganization.strAcronym,
                   RolesList = p.tblRoles
               };

    return data;
}

1 个答案:

答案 0 :(得分:1)

您的返回类型应为IQueryable<T>,这与IQueryable不同。

为此,您需要创建一个类来填写您的选择,而不是像您一样使用匿名类。