【问题标题】:Auto Mapper Mapping Exception When Filtering过滤时自动映射器映射异常
【发布时间】:2021-12-05 20:51:10
【问题描述】:

这里是C#初学者,我只想看到经理与当前用户年龄相同的设施。

由于某种原因,当我使用此代码发布我的网站并尝试查看设施时,我收到一个很长的错误,指出:

***Unable to retrieve facilities from the server. Errors: "error: AutoMapper.AutoMapperMappingException: Error mapping types. Mapping types: WhereListIterator`1 -> IEnumerable`1 System.Linq.Enumerable+WhereListIterator`1[ ***

函数如下:

[HttpGet]
public async Task<IACtionResult> GetFacilities(int page, int pagesize){

var facilities = await _facilityService.GetAllfacilitiesAsync(page, pagesize);

var curr_Age = (int)HttpContext.User.GetAge();

facilities = facilities.Where(facility => facility.Manager.Age == curr_Age);

var model = _mapper.Map<IEnumerable<FacilityViewModel>>(facilities);

return OK(model);
}

当我不按年龄过滤时,我没有问题查看所有设施,所以我不知道导致此问题的原因是什么?

【问题讨论】:

    标签: c# .net automapper nullreferenceexception


    【解决方案1】:

    问题是由多次使用 IEnumerable 引起的。 Possible multiple enumeration of IEnumerable

    您可以通过在.Where(...) 之后添加.ToList() => facilities = facilities.Where(...).ToList(); 来解决它。

    【讨论】:

    • 这有帮助!但是当我尝试这样做时,我仍然得到```无法从服务器检索设施。错误:“错误:System.NullReferenceException:对象引用未设置为对象的实例。在 C:\Repos\XX.Portal\Controllers\ 中的 XX.Portal.Controllers.FacilitiesController.c__DisplayClass5_0.b__0(Facility facility) EquipmentController.cs:System.Linq.Enumerable.ToList() 处的第 4 行 System.Linq.Enumerable.WhereListIterator`1.ToListt[TSource](IEnumerable'1 source) 处...```
    • 可能facility.Manager 为空。试试这个改变:facilities = facilities.Where(facility =&gt; facility.Manager != null &amp;&amp; facility.Manager.Age == curr_Age).ToList();
    • 如果 Manager 不应该为空,请检查 _facilityService 中的任何设施是否有 Manager,如果没有,您可能必须将其包含在 context.Facilities.Include(x =&gt; x.Manager).ToListAsync()
    • 添加检查 facility.Manager != null 有效,谢谢!
    猜你喜欢
    • 2012-08-17
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多