Es kann kein konstanter Wert vom Typ erstellt werden. In diesem Kontext werden nur primitive Typen oder Aufzählungstypen unterstützt

Ich erhalte diesen Fehler für die folgende Abfrage

Es konnte kein konstanter Wert vom Typ API.Models.PersonProtocol . In diesem Kontext werden nur primitive Typen oder Aufzählungstypen unterstützt

ppCombined unten ist ein IEnumerable Objekt von PersonProtocolType , das von concat von 2 PersonProtocol Listen erstellt wird.

Warum scheitert das? Können wir die LINQ JOIN Klausel nicht innerhalb von SELECT eines JOIN ?

 var persons = db.Favorites .Where(x => x.userId == userId) .Join(db.Person, x => x.personId, y => y.personId, (x, y) => new PersonDTO { personId = y.personId, addressId = y.addressId, favoriteId = x.favoriteId, personProtocol = (ICollection) ppCombined .Where(a => a.personId == x.personId) .Select( b => new PersonProtocol() { personProtocolId = b.personProtocolId, activateDt = b.activateDt, personId = b.personId }) }); 

   

    Dies kann nicht funktionieren, da ppCombined eine Sammlung von Objekten im Speicher ist und Sie nicht einer Gruppe von Daten in der database mit einer anderen Gruppe von Daten im Speicher beitreten können. Sie können stattdessen versuchen, die gefilterten Elemente personProtocol der ppCombined Auflistung im Speicher zu extrahieren, nachdem Sie die anderen Eigenschaften aus der database abgerufen haben:

     var persons = db.Favorites .Where(f => f.userId == userId) .Join(db.Person, f => f.personId, p => p.personId, (f, p) => new // anonymous object { personId = p.personId, addressId = p.addressId, favoriteId = f.favoriteId, }) .AsEnumerable() // database query ends here, the rest is a query in memory .Select(x => new PersonDTO { personId = x.personId, addressId = x.addressId, favoriteId = x.favoriteId, personProtocol = ppCombined .Where(p => p.personId == x.personId) .Select(p => new PersonProtocol { personProtocolId = p.personProtocolId, activateDt = p.activateDt, personId = p.personId }) .ToList() }); 

    Ich weiß nicht, ob jemand danach sucht. Ich hatte das gleiche Problem. Eine Auswahl auf der Abfrage und dann das Wo (oder Join) und mit der Select-Variable triggerse das Problem für mich. (Problem war in der Sammlung “Reintegraties” für mich)

     query.Select(zv => new { zv, rId = zv.this.Reintegraties.FirstOrDefault().Id }) .Where(x => !db.Taken.Any(t => t.HoortBijEntiteitId == x.rId && t.HoortBijEntiteitType == EntiteitType.Reintegratie && t.Type == TaakType)) .Select(x => x.zv); 

    hoffe das hilft jedem.

    In meinem Fall konnte ich das Problem folgendermaßen lösen:

    Ich habe meinen Code von diesem geändert:

     var r2 = db.Instances.Where(x => x.Player1 == inputViewModel.InstanceList.FirstOrDefault().Player2 && x.Player2 == inputViewModel.InstanceList.FirstOrDefault().Player1).ToList(); 

    Zu diesem:

     var p1 = inputViewModel.InstanceList.FirstOrDefault().Player1; var p2 = inputViewModel.InstanceList.FirstOrDefault().Player2; var r1 = db.Instances.Where(x => x.Player1 == p1 && x.Player2 == p2).ToList();