Prawdopodobnie będziesz musiał debugować interfejs API i określić więcej szczegółów, aby zawęzić przyczynę. Kilka rzeczy, które widzę:
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;
Wczesna metoda .ToList() była wymagana, ponieważ próbowałeś obliczyć wartości (NameComplet) w wyrażeniu Linq, które normalnie zostałyby przekazane do EF, którego dostawca bazy danych nie zrozumie. Aby uzyskać wydajność, wybierz tylko mapowane właściwości, a zamiast tego zmień wszystkie obliczone wartości na właściwości tylko do odczytu w modelu widoku. (PartenaireMapItem)
private string _nomComplet = null;
public string NomComplet
{
get { return _nomComplet ?? (_nomComplet = LastName.Substring(0,1).ToUpper() + ". " + FirstName); }
}
Ten przykład buforuje wynik, zakładając, że szczegóły nazwy są tylko do odczytu. Jeśli imię/nazwisko można zaktualizować, po prostu zwracaj obliczoną nazwę za każdym razem.
Inne właściwości powinny być poprawne, zakładając, że SeDeclace/ADomicile są wartościami ciągu, a nie jednostkami podrzędnymi. To samo dotyczy listy Prestacji. Lista ciągów dla nazw Prestation powinna być w porządku.
Inną drobną zmianą, którą wprowadziłem, było pobranie modeli widoku w zmiennej do sprawdzenia przed zwróceniem. To lepiej ułatwia użycie punktu przerwania do sprawdzenia wyników przed powrotem. Stąd ustal, czy podczas obliczania wyników wystąpił jakiś błąd, czy też coś innego, jak serializacja wynikowych modeli widoku z powrotem do klienta.