【发布时间】:2010-10-14 13:12:17
【问题描述】:
我正在使用 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 表达式转换为类型“字符串”,因为它不是委托类型。
我该怎么办?我正在尝试创建代码重用并使用我已经编写的数据层版本。数据层版本如下所示:
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;
}
【问题讨论】:
-
您在 RetrieveAllPeople() 中使用匿名类是否有原因?另外,您的 IQueryable 没有指定类型,您不认为有必要获取必要的属性吗?
-
有人能解释一下当编译器抛出“无法将 lambda 表达式转换为类型“字符串”,因为它不是委托类型”时的含义吗?
标签: linq lambda iqueryable