Ema*_*tti 1 .net c# entity-framework-core global-query-filter
我正在尝试找到此问题的最佳解决方案。\n我有一个名为 的数据库表Customer。该表有一个名为 的布尔列Status,它告诉我该客户是否处于活动状态。\n我想创建一种 \xe2\x80\x9c 全局查询过滤器\xe2\x80\x9d 以仅提取以下客户的列表:活跃的,但我知道,如果我在当前拥有的唯一 DbSet 上配置查询过滤器,我总是只会过滤活跃的客户,这对我来说不好,因为有时我还需要非活跃的客户(例如在管理页面)。
我的想法是创建这样的东西,但我不知道如何配置它:
\npublic class Customer {\n //\xe2\x80\xa6properties\n\n public bool Status {get; set;}\n}\n\npublic DbSet<Customer> Customers {get; set;}\npublic DbSet<Customer> CustomersActive {get; set;}\nRun Code Online (Sandbox Code Playgroud)\n这可能吗?
\n相反,公开IQueryable<Customer>属性:
public DbSet<Customer> Customers {get; set;}
public IQueryable<Customer> CustomersActive => Customers.Where(c => c.Status);
public IQueryable<Customer> CustomersInactive => Customers.Where(c => !c.Status);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,更好的名称bool Status是Activeor IsActive。
请注意,您可以链式Where调用。这相当于将条件与 组合起来&&。
var result = Customers
.Where(c => c.Status)
.Where(c => c.Name.StartsWith("A"));
Run Code Online (Sandbox Code Playgroud)
相当于
var result = Customers
.Where(c => c.Status && c.Name.StartsWith("A"));
Run Code Online (Sandbox Code Playgroud)
因此,这种方法不会限制您查询的可能性。
| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |