簡體   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