In meiner MVC5 Anwendung, Ich versuche, eine IEnumerable von SelectListItems für eine listbox zu füllen, die „wählen Sie“ Eigenschaft auf true über eine einfache Abfrage einstellen. Hier ist der Code:MVC5: Einstellung „Selected“ Eigenschaft auf true über eine LINQ-Abfrage
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;
Im Debugger habe ich überprüft, dass Teilnehmer tatsächlich die erwartete Sammlung von ApplicationUsers zurückgibt. Ich habe auch getestet, ob diese für einzelne Benutzer mit so etwas wie dies funktioniert, und ich erhalte die erwarteten boolean Ergebnisse:
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);
Das funktionierte nur finden, wenn der Benutzer mit der ID 1 ist ein Teilnehmer, aber Benutzer mit id 2 nicht ist .
Mein Code funktioniert auch, wenn es keine Teilnehmer gibt. Wenn es jedoch nur einen Teilnehmer gibt, erhalte ich den Fehler: "Es konnte kein konstanter Wert vom Typ 'SdNet.Models.ApplicationUser' erstellt werden. In diesem Kontext werden nur primitive Typen oder Aufzählungstypen unterstützt."
Meine beste Vermutung ist, dass der Ausdruck nicht einen Booleschen Wert zurückgibt auf der Abfrage enthält, obwohl ich weiß nicht, warum dies der Fall sein würde. Jede Hilfe, die Sie anbieten könnten, wäre willkommen.
Danke!
Dank @IvanStoev, funktionierte perfekt. – ChemProfMatt