У меня около 20 различных таблиц отчетов в моей модели данных сущностей, у всех из которых есть несколько общих полей (таких как start_date и end_date). Когда мое приложение для составления отчетов извлекает данные для данного отчета, первое, что я делаю, это фильтрую таблицу на сегодняшнюю дату. Это означает, что у меня есть блоки кода, подобные этому по всему моему коду (VB):
Dim data =
From r in _context.Rpt1
Where
r.start_date <= Now And
r.end_date >= Now
Кажется, должен быть способ поместить эту логику в функцию, которая позволит мне фильтровать любую таблицу, но я не могу понять, как ее структурировать. Я мог бы сделать это:
Public Function FilterByDate(data As IEnumerable) As IEnumerable
Return From d In data Where d.start_date <= Now And d.end_date >= Now
End Function
но так как возвращаемое значение является универсальным IEnumerable, я теряю все преимущества раннего связывания для определенных столбцов отчета.
Есть ли способ создать одну универсальную функцию, которая может применять некоторую логику к различным объектам и возвращать этот конкретный объект вместо универсального? Альтернативно, есть ли способ привести возвращаемое значение обратно к определенному типу объекта сущности? Есть ли другой способ атаковать этот тип проблемы? Просто ищу идеи или разные взгляды на проблему.