#c# #entity-framework #linq #linq-to-sql
#c# #entity-framework #linq #linq-to-sql
Вопрос:
У меня есть функция поиска, которая применяет последовательные .Where
функции к запросу Entity Framework на основе потенциальных параметров. Одна из этих функций сопоставляет любой элемент, который имеет разницу между максимальными и минимальными значениями из реляционной таблицы на определенную величину. Использует формулу (x-y) / ((x y)/ 2) для вычисления разницы.
Поиск max и min из реляционной таблицы является довольно дорогостоящим и повторяется в текущем запросе. Это работает, но медленно, и я чувствую, что делаю что-то не так;
records = records.Where(x => x.FoodItems.Count(
y =>
y.Updates.Min(u => u.QuantityGrams) > 0 amp;amp;
(
y.Updates.Where(u => u.Action == RecordHistory.UpdateTypes.Quantify).GroupBy(u => u.User.Id).Max(u => u.OrderByDescending(z => z.Time).FirstOrDefault().QuantityGrams) -
y.Updates.Where(u => u.Action == RecordHistory.UpdateTypes.Quantify).GroupBy(u => u.User.Id).Min(u => u.OrderByDescending(z => z.Time).FirstOrDefault().QuantityGrams)
) /
(
(
y.Updates.Where(u => u.Action == RecordHistory.UpdateTypes.Quantify).GroupBy(u => u.User.Id).Max(u => u.OrderByDescending(z => z.Time).FirstOrDefault().QuantityGrams)
y.Updates.Where(u => u.Action == RecordHistory.UpdateTypes.Quantify).GroupBy(u => u.User.Id).Min(u => u.OrderByDescending(z => z.Time).FirstOrDefault().QuantityGrams)
) / 2
)
> gvDbl
) > 0);
Есть ли способ переформатировать это, чтобы мне не нужно было получать min / max дважды или как-то ускорить его?
Комментарии:
1. Этот запрос…. трудно следовать. Вам может понадобиться view / FromSql, который возвращает some
(id, min, max)
, чтобы вы могли присоединиться к нему.2. Это
RecordHistory.UpdateTypes.Quantify
значение в вашем локальном процессе или значение в базе данных? ЕстьRecordHistory
ли таблица в базе данных?