gpt4 book ai didi

asp.net-mvc - 获取记录时出错 "LINQ to Entities does not recognize the method"

转载 作者:行者123 更新时间:2023-12-02 05:07:19 25 4
gpt4 key购买 nike

在以下代码中,我尝试获取当前登录用户的个人资料。

Dim userProfile = db1.UserProfiles.Where(Function(p) p.UserId = Membership.GetUser.ProviderUserKey).Single

错误是“LINQ to Entities 无法识别“System.Object CompareObjectEqual(System.Object, System.Object, Boolean)”方法,并且此方法无法转换为存储表达式。”

有谁知道这有什么问题,或者有更好的方法......而且,我怎样才能使它更安全;即如果没有找到记录就添加一个条件?

我正在使用 VB ASP.NET MVC 3。

谢谢。

编辑:

这是我的新代码:

        Dim db1 As UserProfileDbContext = New UserProfileDbContext
Dim user = Membership.GetUser()
Dim key As Guid = user.ProviderUserKey
Dim finalKey = key.ToString
Dim userProfile = db1.UserProfiles.Where(Function(p) p.UserId = finalKey).Single
Dim companyId = userProfile.CompanyId

最佳答案

L2E 正在尝试将您的lambda 表达式(p) p.UserId = Membership.GetUser.ProviderUserKey 渲染为可用于访问数据库的SQL 表达式。

但是,Membership.GetUser() 是一个 .NET 方法。 L2E 提示它不知道如何将此方法呈现为 SQL 语法。

试试这个:

Dim user = Membership.GetUser()
Dim userProfile = db1.UserProfiles.Where(Function(p) p.UserId = user.ProviderUserKey).Single

编辑:MembershipUser.ProviderUserKey 是一个 CLR 对象。 SQL 无法比较两个对象,因此您需要在运行表达式之前对其进行强类型化。例如,如果您的用户 key 是字符串:

Dim user = Membership.GetUser()
Dim key as String= user.ProviderUserKey
Dim userProfile = db1.UserProfiles.Where(Function(p) p.UserId = key).Single

这应该工作得更好,因为 L2E 可以理解简单的等式表达式 = 并且可以将其呈现为等效的 SQL 表达式,例如:

SELECT * FROM Profiles WHERE UserId = @Argument,其中 @Argument 由 Entity Framework 提供。

顺便说一句,L2E 会将链式调用分组直到最后,因此表达式如下:

db1.UserProfiles.Skip(10).Take(30).Where(Function(p) p.UserId = Membership.GetUser.ProviderUserKey)

... 仍然会失败,因为 L2E 会将 Skip TakeWhere 组件组合到单个 SQL 表达式中。您可以通过调用 ToArray ToListToDictionary 强制 L2E 命中服务器。该表达式可以通过将其更改为有效:

db1.UserProfiles.Skip(10).Take(30).ToArray().Where(Function(p) p.UserId = Membership.GetUser.ProviderUserKey)

ToArray 强制执行 SQL 语句,为您提供一个确实支持复杂lambda的 .NET 数组。

关于asp.net-mvc - 获取记录时出错 "LINQ to Entities does not recognize the method",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11766440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com