Невозможно привести объект типа 'System.Data.Objects.ObjectQuery`1 ..... к типу' DatabaseModel1 ...... '. ASP - PullRequest
1 голос
/ 04 марта 2012

Привет, я пытаюсь назначить группу по умолчанию любому пользователю, который регистрируется на моем сайте.Поскольку идентификатор администратора этой группы является администратором, я запрашиваю в своей базе данных группу с идентификатором администратора моего администратора, а затем назначаю эту группу пользователю.Однако возникает следующая ошибка: «Невозможно привести объект типа« 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

любая помощь будет оценена Спасибо

Ответы [ 2 ]

5 голосов
/ 04 марта 2012

Похоже, у вас есть запрос, который может вернуть несколько результатов, но вы пытаетесь присвоить его переменной с одним значением .

Возможно, вам просто нужноиспользуйте что-то вроде:

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;
0 голосов
/ 04 марта 2012
    List<int> adminIDs = context.User0.Where(u=> u.Name.Contains("Administrator"))
                               .Select(u=>u.UserId);

    //you can use `FirstOrDefault()` above and it will return only int not `List<int>`
    // but i'm showing you how to get all IDs then you can get the first one

    int adminId = adminIDs.FirstOrDefault();

    //and then get only one Group using this adminID
    var defaultGroup = context.Groups.FirstOrDefault(g=>g.AdminID == adminId);
    if(defaultGroup != null)
    {
      currentUser.Groups.Add(defaultGroup);
    }

    //you can use the `List<int> adminIDs` if you need to get all admin groups

var groups = context.Groups.Where(gg => adminIDs.Contains(gg.AdminID));

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...