C# LINQ to实体无法识别方法“System.Web.Security.MembershipUser GetUser()方法”
我已经有了一些代码,可以获得我可爱的用户名,并用其内容填充会话:C# LINQ to实体无法识别方法“System.Web.Security.MembershipUser GetUser()方法”,c#,linq-to-entities,C#,Linq To Entities,我已经有了一些代码,可以获得我可爱的用户名,并用其内容填充会话: ManagePreferencesDataContext lg = new ManagePreferencesDataContext(); IEnumerable<tblManagePreference> ol; ol = from login in lg.tblManagePreferences where login.Usernam
ManagePreferencesDataContext lg = new ManagePreferencesDataContext();
IEnumerable<tblManagePreference> ol;
ol = from login in lg.tblManagePreferences
where login.Username == Membership.GetUser().ToString()
select login;
if (ol.Count() > 0)
{
Session["Sess_MemberID"] = ol.First().MemberID;
Session["Sess_LocationID"] = ol.First().LocationID;
lblMemberID.Text = Session["Sess_MemberID"].ToString();
lblLocationID.Text = Session["Sess_LocationID"].ToString();
}
else
{
太棒了!那很好,很漂亮。然而,我已经被指示转到sunny实体框架,老实说,我们还没有开始,也就是说,我对它了解得不够-我一开始知道的很少
无论如何,我试图用以下内容修改上述代码:
VDSORDAL.PDC_VDSOREntities lg = new VDSORDAL.PDC_VDSOREntities();
IEnumerable<VDSORDAL.tblUserPreference> ol;
ol = from login in lg.tblUserPreferences
where login.Username == Membership.GetUser().UserName
select login;
if (ol.Count() > 0)
{
Session["VDS_MemberID"] = ol.First().MemberID;
Session["VDS_LocationID"] = ol.First().LocationID;
Session["VDS_Username"] = ol.First().Username;
lblMemberID.Text = Session["VDS_MemberID"].ToString();
lblLocationID.Text = Session["VDS_LocationID"].ToString();
}
else
{
}
}
然而,当我尝试运行此程序时,我收到了一个错误,它构成了此问题的标题
总之,我错在哪里
像往常一样,对于一个很可能非常简单的问题,很多人表示歉意。你99%都在那里。问题是您正在将一个GetUsername方法传递到L2E解析器中,而该解析器不理解该方法。在这种情况下,您希望处理值而不是方法调用:
VDSORDAL.PDC_VDSOREntities lg = new VDSORDAL.PDC_VDSOREntities();
IEnumerable<VDSORDAL.tblUserPreference> ol;
string userName = Membership.GetUser().UserName; //store the value
ol = from login in lg.tblUserPreferences
where login.Username == userName
select login;
if (ol.Count() > 0)
{
Session["VDS_MemberID"] = ol.First().MemberID;
Session["VDS_LocationID"] = ol.First().LocationID;
Session["VDS_Username"] = ol.First().Username;
lblMemberID.Text = Session["VDS_MemberID"].ToString();
lblLocationID.Text = Session["VDS_LocationID"].ToString();
}
else
{
}
}
发生这种情况是因为LINQtoEntities提供程序对表达式求值以生成查询。它无法在成员身份对象上执行该方法。Linq正在尝试根据您提供的查询构建SQL语句。因此,它需要一个不存在的Membership.GetUser.UserName的SQL equilvanent 简单的解决方法是将其从LINQ查询中拉出:
var name = Membership.GetUser().UserName;
ol = from login in lg.tblUserPreferences
where login.Username == name
select login;
请注意,有些.NET方法,如Trim和Contains,它们有LINQ知道的SQL对应项,可以翻译成SQL。我爱你Dave Swersky!!!非常感谢你。如果这该死的东西杀了我,我会学的……或者我杀了自己!