У меня есть несколько наборов данных, которые получены из контекста первого кода Entity Framework (SQL CE). Существует графический интерфейс, который отображает количество записей в каждом наборе запросов, и после изменения некоторого установленного условия (например, даты) все наборы должны пересчитать свое значение "count".
Несмотря на то, что запросы каждого набора в некотором роде немного отличаются, большинство из них так или иначе имеют общие условия. Простой пример:
RelevantCustomers = People.Where(P=>P.Transactions.Where(T=>T.Date>SelectedDate).Count>0 && P.Type=="Customer")
RelevantSuppliers = People.Where(P=>P.Transactions.Where(T=>T.Date>SelectedDate).Count>0 && P.Type=="Supplier")
Так вот, этих требовательных запросов достаточно, так что каждый раз, когда пользователь меняет какое-либо условие (например, SelectedDate), требуется очень много времени для пересчета количества записей в каждом наборе.
Я понимаю, что отчасти это объясняется необходимостью каждый раз запрашивать, например, транзакции, чтобы проверить, что на самом деле является одинаковым условием для RelevantCustomers и RelevantSuppliers.
Итак, мой вопрос заключается в том, что, учитывая, что эти наборы имеют общие "базовые условия", которые зависят от одних и тех же наборов данных, есть ли более эффективный способ расчета этих наборов?
Я думал о чем-то с пользовательскими родовыми классами, как это:
QueryGroup<People>(P=>P.Transactions.Where(T=>T.Date>SelectedDate).Count>0)
{
new Query<People>("Customers", P=>P.Type=="Customer"),
new Query<People>("Suppliers", P=>P.Type=="Supplier")
}
Я могу структурировать это очень хорошо, но я обнаружил, что в принципе это не имеет никакого значения для эффективности, поскольку все равно необходимо повторять «общее условие» для каждого набора.
Я также пытался сначала извлечь данные базового условия в виде статического «ToList ()», но это вызывает проблемы при работе с объектами навигации (т. Е. People.Addresses не загружаются).
Есть ли какой-то метод, о котором я не знаю, с точки зрения эффективности?
Заранее спасибо!