Pravděpodobně budete muset ladit API a specifikovat více podrobností, které vám pomohou zúžit příčinu. Pár věcí, které vidím:
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;
Dřívější .ToList() bylo vyžadováno, protože jste se pokoušeli vypočítat hodnoty (NameComplet) ve výrazu Linq, které by normálně byly přiváděny do EF, kterému váš poskytovatel DB nerozumí. Pro efektivitu vybírejte pouze mapované vlastnosti a místo toho změňte jakékoli vypočítané hodnoty na vlastnosti pouze pro čtení na vašem modelu pohledu. (PartenaireMapItem)
private string _nomComplet = null;
public string NomComplet
{
get { return _nomComplet ?? (_nomComplet = LastName.Substring(0,1).ToUpper() + ". " + FirstName); }
}
Tento příklad ukládá výsledek do vyrovnávací paměti za předpokladu, že podrobnosti názvu jsou pouze pro čtení. Pokud lze jméno/příjmení aktualizovat, stačí pokaždé vrátit vypočítané jméno.
Ostatní vlastnosti by měly být v pořádku, za předpokladu, že SeDeclace/ADomicile jsou řetězcové hodnoty a nikoli podřízené entity. Totéž platí pro seznam Prestation. Seznam řetězců pro názvy Prestation by měl být v pořádku.
Další drobnou změnou, kterou jsem provedl, bylo načíst modely zobrazení v proměnné, kterou jsem před návratem prohlédl. To lépe usnadňuje použití bodu přerušení ke kontrole výsledků před návratem. Odtud určete, zda se při výpočtu výsledků nevrací nějaká chyba nebo něco jiného, jako je serializace výsledných modelů zobrazení zpět klientovi.