Исключение запроса LINq

Я выполняю следующий запрос

var allroles = from l in metaData.Role select l.RoleId;
var personroles = from k in metaData.PersonRole
                  where k.PersonId == new Guid(Session["user_id"].ToString())
                  select k.RoleId;
Dictionary allroleswithnames = 
    (from l in metaData.Role
     select new { l.RoleId, l.Description })
    .ToDictionary(u => u.RoleId, u => u.Description);
var avl_roles = from j in allroles.Except(personroles)
                select new
                {
                    RoleId = j,
                    Description = allroleswithnames[new Guid(j.ToString())]
                };
clist_avl_roles.DataSource = avl_roles;
clist_avl_roles.DataBind();

Код в коде для ошибки avl_roles

Subquery returned more than 1 value. This is not permitted when the subquery
follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

На самом деле существует несколько строк для ролей с одинаковым идентификатором человека. Как переписать запрос для обработки этой ситуации?

0
nl ja de

1 ответы

var personId = new Guid(Session["user_id"].ToString());
var personRoles = metaData.PersonRole
                          .Where(pr => pr.PersonId == personId)
                          .Select(pr => pr.RoleId);    

var avl_roles = from r in metaData.Role
                where !personRoles.Contains(r.RoleId)
                select new { r.RoleId, r.Description };

Или в одном запросе

var avl_roles = from r in metaData.Role
                join pr in metaData.PersonRole.Where(x => x.PersonId == personId)
                     on r.RoleId equals pr.RoleId into g
                where !g.Any()
                select new { r.RoleId, r.Description };
1
добавлено
@ akshita2gud, пожалуйста, проверьте вариант с одним запросом
добавлено автор Sergey Berezovskiy, источник
это сработало спасибо
добавлено автор Akshita, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot