Asp.net mvc 如何在ApplicationAuthProvider asp.net web api2中使用Linq转换实体

Asp.net mvc 如何在ApplicationAuthProvider asp.net web api2中使用Linq转换实体,asp.net-mvc,asp.net-web-api,Asp.net Mvc,Asp.net Web Api,此代码返回错误不支持linq to实体,请帮助我 错误返回为 LINQ to Entities无法识别方法“System.String get_Item(System.String)”方法,并且无法将此方法转换为存储表达式 这方面的问题 ApplicationUser user=dbContext.Users.Where(s=>s.UserName==context.UserName&&s.Password==context.Password&&s.CodeID==data[“CodeID]”)

此代码返回错误不支持linq to实体,请帮助我 错误返回为 LINQ to Entities无法识别方法“System.String get_Item(System.String)”方法,并且无法将此方法转换为存储表达式

这方面的问题 ApplicationUser user=dbContext.Users.Where(s=>s.UserName==context.UserName&&s.Password==context.Password&&s.CodeID==data[“CodeID]”)

公共类ApplicationAuthProvider:OAuthAuthorizationServerProvider
{
私有只读字符串_publicClientId;
公共ApplicationAuthProvider(字符串publicClientId)
{
if(publicClientId==null)
{
抛出新ArgumentNullException(“publicClientId”);
}
_publicClientId=publicClientId;
}
公共重写异步任务GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentials上下文)
{
var userManager=context.OwinContext.GetUserManager();
var data=await context.Request.ReadFormAsync();
ApplicationUser user=await userManager.FindAsync(context.UserName,context.Password);
ApplicationDbContext dbContext=新的ApplicationDbContext();
//这里有问题
//不支持linq到实体
ApplicationUser user=dbContext.Users.Where(s=>s.UserName==context.UserName&&s.Password==context.Password&&s.CodeID==data[“CodeID]”);
//这里有问题
if(user==null)
{
SetError(“无效的\u授权”,Resources.Resources.invalid\u用户名密码);
返回;
}
ClaimsIdentity oAuthIdentity=等待用户.GenerateUserIdentityAsync(userManager,
OAuthDefaults.AuthenticationType);
ClaimSideEntity cookiesIdentity=等待用户.GenerateUserIdentity异步(userManager,
CookieAuthenticationDefaults.AuthenticationType);
AuthenticationProperties=CreateProperties(user.UserName);
AuthenticationTicket=新的AuthenticationTicket(OAuthidentitity,属性);
上下文。已验证(票证);
context.Request.context.Authentication.sign(cookiesIdentity);
}
公共重写任务令牌端点(OAuthTokenEndpointContext)
{
foreach(context.Properties.Dictionary中的KeyValuePair属性)
{
AdditionalResponseParameters.Add(property.Key,property.Value);
}
返回Task.FromResult(空);
}
公共覆盖任务ValidateClientAuthentication(OAuthValidateClientAuthenticationContext)
{
//资源所有者密码凭据不提供客户端ID。
if(context.ClientId==null)
{
context.Validated();
}
返回Task.FromResult(空);
}
公共覆盖任务ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext上下文)
{
if(context.ClientId==\u publicClientId)
{
Uri expectedRootUri=新Uri(context.Request.Uri,“/”;
if(expectedRootUri.AbsoluteUri==context.RedirectUri)
{
context.Validated();
}
}
返回Task.FromResult(空);
}
公共静态身份验证属性CreateProperties(字符串用户名)
{
IDictionary data=新字典
{
{“用户名”,用户名}
};
返回新的AuthenticationProperties(数据);
}
}

Linq to entities无法转换此部件:

s.CodeID == data["CodeID"]
它将
CodeID
值从数据集合检索到有意义的SQL语句中

您需要做的是将此值存储在
where
表达式前面的变量中,如下所示:

var codeId = data["CodeID"];
然后修改
中的
以使用它:

var codeId = data["CodeID"];
ApplicationUser user = dbContext.Users.Where(s => s.UserName == context.UserName &&  s.Password == context.Password && s.CodeID == codeId);
现在Linq可以正确地生成SQL语句了

var codeId = data["CodeID"];
ApplicationUser user = dbContext.Users.Where(s => s.UserName == context.UserName &&  s.Password == context.Password && s.CodeID == codeId);