c#linq包含参数值

  • 本文关键字:参数 包含 c#linq c# linq
  • 更新时间 :
  • 英文 :


我创建了一个静态方法,它只显示Deleted = false所在的项目,看起来像这样:

public static IQueryable<T> OnlyActive<T>(this IQueryable<T> items, bool active = true) where T: BaseModel => items.Where(m => m.Deleted != active);

我在整个应用程序中都使用这个:

return _databaseContext.Categories.OnlyActive()

我后来意识到这很好,但如果我使用include,那就不行了。我有这样的方法:

public class GenericListHandler<TContext, T, TKey> : IRequestHandler<GenericList<T, TKey>, Attempt<IQueryable<T>>>
where TContext: DbContext
where T : BaseModel, IKey<TKey>
{
private readonly TContext _databaseContext;
public GenericListHandler(TContext databaseContext) => _databaseContext = databaseContext;
public async Task<Attempt<IQueryable<T>>> Handle(GenericList<T, TKey> request, CancellationToken cancellationToken)
{
var query = request.Take > 0 ? _databaseContext.Set<T>().OnlyActive().OrderBy(m => m.Id).Skip(request.Skip).Take(request.Take) : _databaseContext.Set<T>().OnlyActive();

var includes = request.Includes;
if (includes.Length == 0) return Attempt<IQueryable<T>>.Succeed(query);
query = includes.Aggregate(query, (current, include) => current.Include(include));
return Attempt<IQueryable<T>>.Succeed(query);
}
}

正如您所看到的,它列出了一个模型。如果没有include,则只列出活动的include。如果包含,则仅列出活动模型,而不列出包含。

我想写一个方法来检查includes,并确保它们不会被删除。有人知道我该怎么做吗?

您可以使用全局查询过滤器https://learn.microsoft.com/en-us/ef/core/querying/filters其将自动过滤掉已删除的实体。

要禁用查询过滤器,只需在查询中添加IgnoreQueryFilters()函数即可。

最新更新