おそらく、APIをデバッグし、原因を絞り込むために詳細を指定する必要があります。私が見ることができるいくつかのこと:
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;
DBプロバイダーが理解できないEFに通常供給されるLinq式の値(NameComplet)を計算しようとしたため、初期の.ToList()が必要でした。効率を上げるために、マップされたプロパティのみを選択し、代わりに、計算された値をビューモデルの読み取り専用プロパティに変更します。 (PartenaireMapItem)
private string _nomComplet = null;
public string NomComplet
{
get { return _nomComplet ?? (_nomComplet = LastName.Substring(0,1).ToUpper() + ". " + FirstName); }
}
この例では、名前の詳細が読み取り専用であると想定して結果をバッファリングします。名/名前を更新できる場合は、毎回計算された名前を返すだけです。
SeDeclace / ADomicileが文字列値であり、子エンティティではないと仮定すると、他のプロパティは問題ないはずです。プレステーションのリストについても同じことが言えます。 Prestation名の文字列のリストは問題ないはずです。
私が行った他の小さな変更は、変数内のビューモデルを取得して、戻る前に検査することでした。これにより、ブレークポイントを使用して、戻る前に結果を検査しやすくなります。ここから、結果の計算、または結果のビューモデルをクライアントにシリアル化するなどの他の何かからエラーが戻ってきているかどうかを判断します。