扩展SubSonic的IQueryable结构(通过LINQ?)

时间:2010-05-17 14:18:55

标签: linq subsonic3 iqueryable

我正在开发一个按“客户ID”分组数据的项目。当用户登录时,他们仅限于该客户和该客户。

我正在使用SubSonic3,我看到的东西是这样的:

public IEnumerable<Models.Foo> FindFoo(int userID, string searchText, int pageIndex, int pageSize)
{
    return from item in Foo.GetPaged(pageIndex, pageSize)
           where (item.Name.Contains(searchText) ||   
                  item.Description.Contains(searchText)) &&
                  item.CustomerID == CurrentCustomerID()
                  select new Models.Foo(item);
}

我想要做的是抽象item.CustomerID行,因为每个查询都会发生这种情况,所以它会更简单(也更安全)它在一个地方,并保证它会在任何地方发生。

所以,我的问题是:可以这样做,如果是的话,怎么做?

1 个答案:

答案 0 :(得分:1)

对于亚音速生成的类是部分的,你可以为它们添加一些接口...只需创建你是与CustomerID属性的接口(例如将其命名为ICusomerEntity)并为任何生成的类创建部分接口将这个接口应用于它们......然后只使用通用的亚音速方法来复制ICustomerEntity,而不是特定的类..

例如,您可以使用约束T:ICustomerEntity创建名为GetCustomerEntity的泛型方法,该方法将返回IQueriable,并使用bascic查询将CustomerId与已登录用户进行比较。

希望它有所帮助...