Asp.net 无法强制转换类型为';System.Data.Objects.ObjectQuery`1。。。。。输入';数据库模型1;。ASP

Asp.net 无法强制转换类型为';System.Data.Objects.ObjectQuery`1。。。。。输入';数据库模型1;。ASP,asp.net,linq,entity-framework,Asp.net,Linq,Entity Framework,嗨,我正在尝试为任何在我的网站注册的用户分配一个默认组。由于该组的管理员Id是管理员,因此我在数据库中查询管理员Id为管理员的组,然后将该组分配给用户。但是,将抛出以下错误 “无法将“System.Data.Objects.ObjectQuery`1[DatabaseModel1.Group]”类型的对象强制转换为“DatabaseModel1.Group”类型。” 这是密码 Dim defaultGroup = (From group As Group In context.G

嗨,我正在尝试为任何在我的网站注册的用户分配一个默认组。由于该组的管理员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
任何帮助都将不胜感激
谢谢

听起来您有一个可以返回多个结果的查询,但您试图将其分配给一个值变量

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

currentUser.Groups.Add(defaultGroup.First)
可能的选择是:

  • 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;

听起来您有一个可以返回多个结果的查询,但您试图将其分配给一个值变量

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

currentUser.Groups.Add(defaultGroup.First)
可能的选择是:

  • 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;
List adminIDs=context.User0.Where(u=>u.Name.Contains(“管理员”))
.选择(u=>u.UserId);
//您可以使用上面的'FirstOrDefault()',它将只返回int而不是'List`
//但我会告诉你如何获得所有的身份然后你可以得到第一个
int adminId=adminIDs.FirstOrDefault();
//然后仅获取一个使用此adminID的组
var defaultGroup=context.Groups.FirstOrDefault(g=>g.AdminID==AdminID);
if(defaultGroup!=null)
{
currentUser.Groups.Add(默认组);
}
//如果需要获取所有管理员组,可以使用“列出管理员ID”
var groups=context.groups.Where(gg=>adminIDs.Contains(gg.AdminID));
希望有帮助。

列出adminIDs=context.User0.Where(u=>u.Name.Contains(“管理员”))
.选择(u=>u.UserId);
//您可以使用上面的'FirstOrDefault()',它将只返回int而不是'List`
//但我会告诉你如何获得所有的身份然后你可以得到第一个
int adminId=adminIDs.FirstOrDefault();
//然后仅获取一个使用此adminID的组
var defaultGroup=context.Groups.FirstOrDefault(g=>g.AdminID==AdminID);
if(defaultGroup!=null)
{
currentUser.Groups.Add(默认组);
}
//如果需要获取所有管理员组,可以使用“列出管理员ID”
var groups=context.groups.Where(gg=>adminIDs.Contains(gg.AdminID));

希望有帮助。

该死的。。。真不敢相信我第二次爱上了这个。谢谢你,乔恩!该死真不敢相信我第二次爱上了这个。谢谢你,乔恩!