Probabilmente dovrai eseguire il debug dell'API e specificare più dettagli per restringere la causa. Un paio di cose che posso vedere:
var prestation = queryString.FirstOrDefault();
// Handle when prestation comes back #null. Is that valid?
var results = db.Partenaires.Where(p => p.PartenairePrestations.Any(pp => pp.Prestation.NomPrestation == prestation.Value))
// .ToList() // Avoid .ToList() here... Select the entity properties you need.
.Select(p => new PartenaireMapItem {
IdPartenaire = p.IdPartenaire,
FirstName = p.FirstName,
LastName = p.LastName,
// NomComplet = p.LastName.Substring(0,1).ToUpper() + ". " + p.FirstName, // Remove. Make this a computed property in your view model.
Type = p.Type,
// DureeMin = 50, // Can remove, can be a computed property.
Lat = p.Lat,
Lng = p.Lng,
ImageUrl = p.ImageUrl,
SeDeplace = p.SeDeplace, // Ok if a String/value.
ADomicile = p.ADomicile, // Ok if a String/value.
Notes = p.NoteClientPartenaires, // Ok if a String/value.
Prestations = p.PartenairePrestations.Select(y => y.Prestation.NomPrestation).ToList(); // Assuming this is retrieving the names of presentations. List<string>.
}).ToList();
return results;
Il primo .ToList() era richiesto perché stavi tentando di calcolare i valori (NameComplet) nell'espressione Linq che normalmente sarebbero stati inviati a EF che il tuo provider di database non capirà. Per motivi di efficienza, seleziona solo le proprietà mappate e modifica i valori calcolati in proprietà di sola lettura nel modello di visualizzazione. (PartenaireMapItem)
private string _nomComplet = null;
public string NomComplet
{
get { return _nomComplet ?? (_nomComplet = LastName.Substring(0,1).ToUpper() + ". " + FirstName); }
}
Quell'esempio memorizza il risultato nel buffer presupponendo che i dettagli del nome siano di sola lettura. Se il nome/cognome può essere aggiornato, è sufficiente restituire ogni volta il nome calcolato.
Le altre proprietà dovrebbero andare bene, supponendo che SeDeclace/ADomicile siano valori stringa e non entità figlio. Lo stesso vale per l'elenco delle Prestazioni. Un elenco di stringhe per i nomi Prestation dovrebbe andare bene.
L'altra piccola modifica che ho apportato è stata quella di recuperare i modelli di visualizzazione in una variabile da ispezionare prima della restituzione. Ciò facilita meglio l'utilizzo di un punto di interruzione per controllare i risultati prima di tornare. Da qui determina se si verifica un errore dal calcolo dei risultati o qualcos'altro come la serializzazione dei modelli di visualizzazione risultanti sul client.