2010-04-12 38 views
4

我在我的模型中有一个名为Customers并带有字段IsActive的表格。每当我对客户运行查询时,只应检索活动客户。我可以在每个查询中包含该过滤器,但看起来并不那么。我希望能够覆盖Object Context杠杆的Customers属性,但我不确定这是否可行。任何帮助将非常感激!由于如何在实体框架上应用全局过滤器?

回答

-5

所有你需要做的是检索所有的客户无论他们是活跃与否,然后使用

foreach(Customer c in Results) 
{ 
if(c.IsActive) 
    listofactivecustomers.Add(c); 
} 
+2

后,如果年的使用软件,现在有1个亿不活动的用户,也不会解决方案拖慢系统? – billy 2012-10-28 13:17:24

+0

@比利感谢您的反对票。我不知道这必须是可扩展的。我认为如果几年前提出的任何问题都会遇到问题。现在我可以放心,你有未来的最大利益,以及答案可能面临的任何问题。我很高兴你可以花时间浏览每个问题和答案,并确保它经得起时间的考验。 – 2012-11-01 13:35:14

+1

@LaurenceBurke伴侣,这只是一个坏主意 - 这个过滤需要发生在服务器端。现在,你可以删除不好的建议吗? – 2013-03-12 08:48:19

3

也许你可以声明新的属性,并使用它:

public partial class MyEntities 
{ 
    public ObjectQuery<User> ActiveCustomers 
    { 
     get 
     { 
      return Customers.Where(c => c.IsActive); 
     } 
    } 
} 
0

我不知道为什么这是你的问题。你可以把一个查询放在一些函数里面:

IEnumerable<Customers> GetActiveCustomers() 
{ 
    var activeCustomers = 
    from cust in db.Customers 
    where cust.IsActive == true 
    select cust; 
    return activeCustomers; 
} 

并且每当你喜欢的时候调用它。你甚至可以把活跃的客户放在一些私人列表中,甚至可以放在更好的ObservableCollection中。然后你可以再次查询你的结果:

var myCustomers = 
from cust in GetActiveCustomers() 
where cust.CustomerName == "John" 
select cust; 

就是这样。

5

虽然迟到了,但我会把它放在这里,这样可以帮助别人。

您还可以在您的edmx文件中为您的实体设置一个条件。选择你的实体和转到映射细节并创建一个新的条件。

enter image description here

+0

有没有办法以编程的方式执行此步骤? – CeOnSql 2015-12-18 10:58:28