无法转换类型为'System.Data.Objects.ObjectQuery`1 .....的对象以输入'DatabaseModel1 ......'.ASP

Ale*_*pka 1 linq asp.net entity-framework

您好我试图为任何注册我的网站的用户分配一个默认组.由于该组的管理员ID是管理员,因此我在数据库中查询管理员ID为我的管理员的组,然后将该组分配给用户.但是,抛出以下错误"无法将类型'System.Data.Objects.ObjectQuery`1 [DatabaseModel1.Group]'的对象强制转换为'DatabaseModel1.Group'."下面是代码

        Dim defaultGroup = (From group As Group In context.Groups
                     Where group.AdminID = ((From users As User0 In context.User0
                                            Where users.Name Like "Administrator"
                                            Select users.UserID).First)
                       Select group)

        currentUser.Groups.Add(defaultGroup)//the error is being thrown here
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激谢谢

Jon*_*eet 5

听起来你有一个可以返回多个结果的查询,但是你试图将它分配给一个单值变量.

您可能只需要使用以下内容:

currentUser.Groups.Add(defaultGroup.First)
Run Code Online (Sandbox Code Playgroud)

可能的选择是:

  • First() - 允许多个结果并返回第一个; 如果没有,将抛出异常
  • FirstOrDefault() - 允许多个结果并返回第一个; null如果没有结果,将返回元素类型的默认值(例如)
  • Last() - 允许多个结果并返回最后一个; 如果没有,将抛出异常
  • LastOrDefault() - 允许多个结果并返回最后一个; null如果没有结果,将返回元素类型的默认值(例如)
  • Single() - 期待一个结果; 如果没有结果或多个结果,则抛出异常

现在您已经显示了查询,听起来您可能应该使用连接而不是嵌套查询.我对VB查询语法不热,但在C#中你可能想要:

var defaultGroupQuery = 
        from group in context.Groups
        join user in context.User0 on group.AdminID equals user.UserID
        where user.Name == "Administrator"
        select group;
Run Code Online (Sandbox Code Playgroud)