EF 核心过滤

EF Core Filtering

我有一些目前看起来像这样并在 EF Core 中工作的东西:

DbContext.Computers.OrderByDirection(state.SortDirection, 
    x => x.Actions.FirstOrDefault(y => y.GetType() == typeof(PingAction) && 
    y.History.Any(z => z.Status == Status.Succeeded && 
    (DateTime.Now - z.WhenExecuted).TotalMinutes < 10)))

但是我还需要在别处使用 x 函数并且不想多次对其进行硬编码。我怎样才能将该函数保存到变量或其他东西,并且仍然允许它与 EF 核心的服务器端过滤一起使用,因为当然这将被转换为 SQL?

更新

OrderByDirection 的签名:

public static IOrderedEnumerable<TSource> OrderByDirection<TSource, TKey>(this IEnumerable<TSource> source, SortDirection direction, Func<TSource, TKey> keySelector)
public static IOrderedQueryable<TSource> OrderByDirection<TSource, TKey>(this IQueryable<TSource> source, SortDirection direction, Expression<Func<TSource, TKey>> keySelector)

我认为您可以将表达式提取到一个类似于此的变量中:

(我只是根据您的 属性 名称猜测 class 名称,它们在您的代码中并不明显):

Expression<Func<Computer, Action>> expression = x => x.Actions.FirstOrDefault(
    action => action.GetType() == typeof(PingAction) && action.History.Any(
        history => history.Status == Status.Succeeded && (DateTime.Now - z.WhenExecuted).TotalMinutes < 10));

DbContext.Computers.OrderByDirection(state.SortDirection, expression);

那么这个表达式可以在别处重复使用。