カスタム インターセプト動作を使用してレコードをフィルター処理しています (フィルターは現在のユーザーが誰であるかに基づいています) が、いくつか問題があります (これはインターセプターの Invoke メソッドの本体です)
var companies = methodReturn.ReturnValue as IEnumerable<ICompanyId>;
List<string> filter = CompaniesVisibleToUser();
methodReturn.ReturnValue = companies.Where(company =>
filter.Contains(company.CompanyId)).ToList();
CompaniesVisibleToUser は、ユーザーが表示できる会社 ID の文字列リストを提供します。
私の問題は、着信データ (企業) がさまざまなタイプの IList になることです。これらはすべて、データが companyId でフィルター処理されるように ICompanyId を実装する必要があります。ただし、キャスト - as IEnumerable により、データがこの型として返され、コール スタックのさらに上に問題が発生するようです。
戻り値の型を変更せずにフィルターを実行するにはどうすればよいですか?
私が得る例外は
タイプ 'System.Collections.Generic.List 1[PTSM.Application.Dtos.ICompanyId]' to type 'System.Collections.Generic.IList
1[PTSM.Application.Dtos.EmployeeOverviewDto]' のオブジェクトをキャストできません。
上位の呼び出し元は
public IList<ApplicationLayerDtos.EmployeeOverviewDto> GetEmployeesOverview() { return _appraisalService.GetEmployeesOverview(); }
私が変更した場合
IEnumerable<ICompanyId>
からIEnumerableへの変換<EmployeeOverviewDto>
は期待どおりに機能しますが、フィルタリングされるリストが常にそのタイプであるとは限らないため、明らかにこれは私が望むものではありません。