繁体   English   中英

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 function 并且不想多次对其进行硬编码。 我怎样才能将 function 保存到变量或其他东西,并且仍然允许它与 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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM