我正在使用自定义拦截行为来过滤记录(过滤器是基于当前用户的身份)但是我遇到了一些困难(这是拦截器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,所有这些都应该实现ICompanyId,以便在companyId上过滤数据。但是,似乎演员 - 作为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>
它按预期工作但显然这不是我想要的,因为被过滤的列表并不总是那种类型。
答案 0 :(得分:0)
执行作业时:
methodReturn.ReturnValue = companies.Where(company =>
filter.Contains(company.CompanyId)).ToList();
您将返回值设置为List<ICompanyId>
类型。
您可以将更高级的通话功能更改为:
public IList<ApplicationLayerDtos.ICompanyId> GetEmployeesOverview()
{
return _appraisalService.GetEmployeesOverview();
}
或者您可以将其更改为:
public IList<ApplicationLayerDtos.EmployeeOverviewDto> GetEmployeesOverview()
{
var result = (List<EmployeeOverviewDto>)_appraisalService.GetEmployeesOverview().Where(x => x.GetType() == typeof(EmployeeOverviewDto)).ToList();
return result;
}
两者都应该有用。