使用实体框架扩展过滤查询

时间:2009-10-06 08:30:07

标签: entity-framework

我的testdatabase中有3个表,Customers< - > CustomersUsergroups< - >群组

对于客户,我有一个返回所有用户组的方法:

        public IQueryable<Usergroup> GetUsergroups()
    {
        return from ug in _entities.UsergroupSet.Include("Customer")
               select ug;
    }

为此,我有一个类Usergroup

的“过滤器类”
        public static IQueryable<Usergroup> ByUsergroupID(this IQueryable<Usergroup> qry, int usergroupID)
    {
        return from ug in qry
               where ug.UsergroupID == usergroupID
               select ug;
    }

所以当我输入:

return _repository.GetUsergroups().ByUsergroupID(usergroupID);

它的效果很好,但现在的问题是我想扩展所以我可以按CustomerID过滤,有点像:

public static IQueryable<Customer> ByCustomerID(this IQueryable<Customer> qry, int customerID)
    {
        return from c in qry
               where c.CustomerID == customerID
               select c;
    }

所以我可以像:

一样使用它
return _repository.GetUsergroups().ByCustomerID(customerID);

是否可以使用“Include”?或者它不是一个简单的方法来解决它,因为它们是不同的类?

提前致谢

/ M

1 个答案:

答案 0 :(得分:2)

我不确定我是否按照您描述的方式理解问题,但您不能使用方法ByCustomerID是正常的,因为您在IQueryable<Customer>上定义的扩展名不在IQueryable<UserGroup>上。

如果您想在IQueryable<UserGroup>上定义它,如果您打算将UserGroup分配给一个客户,可以这样做:

public static IQueryable<UserGroup> ByCustomerID(this IQueryable<UserGroup> qry, int customerID)
     {
         return from ug in qry
                from c in ug.Customer
                where c.CustomerID == customerID
                select ug;
     }