我在管理器类中实现Get方法时遇到了问题我需要如何筛选以及在哪里编写筛选方法
简而言之-我有数据类Gym,存储库类和方法Find在其中。我在数据类中编写了方法- IsAppreciateToRequest(RequestName)来在管理器类中做类似的事情
public IEnumerable<GymDto> GetGyms(GetGymRequest request)
{
return _gymRepository
.Find(gym => gym.IsAppreciateToRequest(request))
.AsEnumerable()
.Select(GymDto.FromEntityToDto);
}
我认为这是shitcode,但也idk如何摆脱这一点,以及如何写它的正确方式(在此之前,我有Get方法像30-50行以上的每个管理器类)
IsAppreciateToRequest方法:
public bool IsAppreciateToRequest(GetGymRequest other)
{
return (string.IsNullOrEmpty(other.Name) || Name == other.Name)
&& (string.IsNullOrEmpty(other.Location) || Location == other.Location)
&& (other.SectionRequest == null || Sections.All(section => section.IsAppreciateToRequest(other.SectionRequest)));
}
1条答案
按热度按时间whlutmcx1#
可以使用LINQKit将表达式树注入到过滤器中,需要配置
DbContextOptions
:您的类应该使用返回
Expression<Func<>>
的静态函数进行扩展,当前方法应该具有ExpandableAttribute
例如:
然后LINQKit将扩展静态方法返回的表达式,并将条件注入 predicate 。
同样的方法可以用于将实体投影到DTO。类似于我的答案here,它也显示了LINQKit的已知替代方案。