В моем приложении MVC5 я пытаюсь заполнить IEnumerable из SelectListItems для списка, установив для свойства «select» значение true с помощью простого запроса. Вот код:MVC5: Установка свойства «Selected» в true с помощью запроса LINQ
GroupActivity groupActivity = await db.GroupActivities.FindAsync(id);
ICollection<ApplicationUser> attendees = groupActivity.Attendees;
IEnumerable<SelectListItem> items = db.Users.Select(c => new SelectListItem
{
Value = c.Id.ToString(),
Text = c.LastName + ", " + c.FirstName,
Selected = attendees.Contains(c)
})
.OrderBy(q => q.Text);
ViewBag.Userlist = items;
В отладчике я проверил, что участники действительно возвращаются ожидаемый сбор ApplicationUsers. Я также протестировал, работает ли это для отдельных пользователей с чем-то вроде этого, и я получить ожидаемые результаты: булевы
ApplicationUser yes = db.Users.First(n => n.Id == 1);
var x = groupActivity.Attendees.Contains(yes);
ApplicationUser no = db.Users.First(n => n.Id == 2);
var y = groupActivity.Attendees.Contains(no);
Это работало просто найти, когда пользователь с идентификатором 1 является участником, но пользователь с идентификатором-не ,
Мой код также отлично работает, когда нет посетителей. Однако, когда есть даже один участник, я получаю сообщение об ошибке: «Невозможно создать постоянное значение типа« SdNet.Models.ApplicationUser ». В этом контексте поддерживаются только примитивные типы или типы перечислений».
Мое лучшее предположение заключается в том, что выражение не возвращает логическое значение в содержащем запросе, хотя я не знаю, почему это было бы так. Любая помощь, которую вы могли бы предложить, была бы оценена по достоинству.
Спасибо!
Спасибо @IvanStoev, работал отлично. – ChemProfMatt