C# 按特定条件选项从所有存储库获取数据
我有一个标签“今天”、“明天”、“不久”、“所有事件”(以及更多)。C# 按特定条件选项从所有存储库获取数据,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个标签“今天”、“明天”、“不久”、“所有事件”(以及更多)。 每个选项卡都有一个标准(评级、名称、事件日期)、期间(今天、天、周、明天、两周)和顺序(升序或降序)。 我希望根据选项卡接收数据。 有以下几种方法: private List<IEvent> GetEventList(int tab) { var posterEvent = PosterEventRepository.GetById(tab); var criteria = Enum.Parse
每个选项卡都有一个标准(评级、名称、事件日期)、期间(今天、天、周、明天、两周)和顺序(升序或降序)。
我希望根据选项卡接收数据。 有以下几种方法:
private List<IEvent> GetEventList(int tab)
{
var posterEvent = PosterEventRepository.GetById(tab);
var criteria = Enum.Parse(typeof (PosterEventEnum.CriteriaEvent), posterEvent.Criteria);
var period = Enum.Parse(typeof(PosterEventEnum.CriteriaEvent), posterEvent.Period);
var order = Enum.Parse(typeof(PosterEventEnum.CriteriaEvent), posterEvent.Order);
}
谢谢。您可以查看模式,但具体实现将因回购协议的内部结构而异
通常,您需要遍历所有存储库,并获取满足条件的所有项
switch(criteria)
{
case "Today":
var todaySpec=new TodaySpec();
var result=repos.SelectMany(r=>r.GetRelevant(todaySpec));
//then combine and sorting by rating
}
您可以使用注册表来注册每个条件选项和相应的存储库方法,而不是使用开关。 注册表可以是一个键-值对字典,该字典的键为选项名,值为委托方法列表。 大概是这样的:
Dictionary<string,Dictionary<string,Func<IEvent>> _registry;
_registry.Add("Today",new Dictionary<string,Func<IEvent>>{{"Film",FilmRepository.GetFilmsForToday},{"Sport",SportRepository.GetSportsForToday}};
Dictionary<string,Dictionary<string,Func<IEvent>> _registry;
_registry.Add("Today",new Dictionary<string,Func<IEvent>>{{"Film",FilmRepository.GetFilmsForToday},{"Sport",SportRepository.GetSportsForToday}};
var methods=_registry[criteria];
resultFilm=methods["Film"]();
resultSport=methods["Sport"]();