LINQ to Entities无法识别方法System.Guid

时间:2015-08-19 11:03:47

标签: c# linq entity-framework

我有以下错误:

  

LINQ to Entities无法识别方法'System.Guid GetIdAuthenticatedUser()'方法,并且此方法无法转换为商店表达式。

当我运行此代码时会发生这种情况:

   ...
 if (_context.Voice.Any(u => u.VoiceUserId == _repository.GetIdAuthenticatedUser())) //error here
                    {
                        Response.Redirect("MainPage.aspx");
                    }
    ...

方法GetIdAuthenticatedUser()返回经过身份验证的用户的ID:

 public Guid GetIdAuthenticatedUser()
        {
            MembershipUser user = Membership.GetUser();
            var a = user.ProviderUserKey;
            var userid = new Guid(a.ToString());
            return userid;
        }

u.VoiceUserId的类型为Guid

需要做些什么来使其发挥作用?

1 个答案:

答案 0 :(得分:2)

只需将对函数的调用移至linq查询外部

即可
var id = _repository.GetIdAuthenticatedUser();
if (_context.Voice.Any(u => u.VoiceUserId == id))
{
    Response.Redirect("MainPage.aspx");
}

问题在于,就像错误所说的那样,方法GetIdAuthenticatedUser()不是linq的一部分,所以当linq试图为DB生成查询时,它不知道如何将方法调用转换为sql