tblUserRole Permission =
(oCurrenUserPermission.GetPermission(Convert.ToString(Session["Navigation"])));
if (Permission.IsInsert == 1)
{
}
public IQueryable GetPermission(string sPageName)
{
IQueryable query;
#region MyRegion
query = from r in this.Context.tblUserRoles
join p in this.Context.tblPageInfos on r.PageID equals p.PageID
where r.Record_Status == 2 && p.PageName == sPageName
select r;
return query;
#endregion
}
上面的语法显示了以下错误:
错误1无法将类型'System.Linq.IQueryable'隐式转换为'AkijBeverage.ServiceObject.tblUserRole'。存在显式转换(您是否缺少演员?)E:\ Project-Akij \ 09-July-2010 \ AkijBeverage \ AkijBeverage \ SecurityUserControls \ UCUserRole.ascx.cs 63 43 AkijBeverage
如何解决这个问题?
答案 0 :(得分:1)
据我所知,该查询与tblUserRole
不兼容。
它将返回IEnumereable<bool>
而不是tblUserRole。
真正的问题是您在两个不同的位置选择了IsInsert
:在查询中,再次在if()
最简单的方法就是返回完整的tblUserRole对象:
return (from r in this.Context.tblUserRoles
join p in this.Context.tblPageInfos on r.PageID equals p.PageID
where r.Record_Status == 2 && p.PageName == sPageName
select r).SingleOrDefault();
答案 1 :(得分:1)
目前您正在返回查询 - 而不是单个项目。您想要返回什么?
这是一个选项,例如:
public tblUserRole GetPermission(string sPageName)
{
return (from r in this.Context.tblUserRoles
join p in this.Context.tblPageInfos on r.PageID equals p.PageID
where r.Record_Status == 2 && p.PageName == sPageName
select r).FirstOrDefault();
}
这将返回第一个匹配的角色,如果没有,则返回null
。
如果你做想要返回一个查询,那么作为一个强类型的IQueryable<T>
会更好:
public IQueryable<tblUserRole> GetPermissions(string sPageName)
{
return from r in this.Context.tblUserRoles
join p in this.Context.tblPageInfos on r.PageID equals p.PageID
where r.Record_Status == 2 && p.PageName == sPageName
select r;
}
然后你需要将你的调用代码更改为:
tblUserRole Permission
oCurrenUserPermission.GetPermissions(Convert.ToString(Session["Navigation"]))
.FirstOrDefault();
答案 2 :(得分:-1)
问题是你有一个IQueryable并试图在没有演员的情况下分配给“Type”。
将您的方法更改为:
public IQueryable<tblUserRole > GetPermission(string sPageName)
然后再做(First / FirstOrDefault / Single / etc ..)
oCurrenUserPermission.GetPermission(...).FirstOrDefault();
或投下它并交叉手指并选择一个。
(tblUserRole)oCurrenUserPermission.GetPermission(...).FirstOrDefault();
旁注
我建议您以更友好的方式命名代码。无需在开头添加“类型”。例如,可以更好地命名所有内容:
string navigationValue = Convert.ToString(Session["Navigation"]);
UserRole permission =
currentUserPermission.GetPermission(navigationValue ).FirstOrDefault();
//If this isn't a boolean i would consider using one
if (permission.IsInsert == 1)
{
}
public IQueryable<UserRole> GetPermission(string sPageName)
{
#region MyRegion
var query = from r in this.Context.UserRoles
join p in this.Context.PageInformation on r.PageID equals p.PageID
where r.Record_Status == 2 && p.PageName == sPageName
select r;
return query;
#endregion
}