【发布时间】:2016-12-14 17:05:53
【问题描述】:
在我的 MVC5 应用程序中,我试图为列表框填充 SelectListItems 的 IEnumerable,通过一个简单的查询将“select”属性设置为 true。代码如下:
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;
在调试器中,我已验证与会者确实返回了预期的 ApplicationUser 集合。我还测试了这是否适用于类似这样的个人用户,我得到了预期的布尔结果:
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);
这仅在 ID 为 1 的用户是与会者但 ID 为 2 的用户不是时才起作用。
当没有与会者时,我的代码也可以正常工作。但是,即使只有一位与会者,我也会收到错误消息:“无法创建类型为 'SdNet.Models.ApplicationUser' 的常量值。在此上下文中仅支持原始类型或枚举类型。”
我最好的猜测是表达式在 contains 查询中没有返回布尔值,尽管我不知道为什么会这样。如果您能提供任何帮助,我们将不胜感激。
谢谢!
【问题讨论】:
标签: c# linq linq-to-entities asp.net-mvc-5