2010-05-17 2 views
2

Я работаю над проектом, который группирует данные по «идентификатору клиента». Когда пользователь входит в систему, они ограничены только этим клиентом и этим клиентом.Расширение IQueryable структуры SubSonic (через LINQ?)

Я работаю с 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, потому что это произойдет для каждый запрос, в обязательном порядке, поэтому было бы проще (и более безопасным) сделать это в одном месте и гарантировать, что это произойдет повсюду.

Итак, мой вопрос: может ли это быть сделано, и если да, то как?

+0

Надеюсь, вы поймете, что в конечном итоге вы получите секретный поиск с этим кодом – CarneyCode

ответ

1

Что касается дозвуковых генерируемых классов, вы можете добавить к ним какой-то интерфейс ... Просто создайте интерфейс с идентификатором CustomerID (например, его имя ICusomerEntity) и сделайте частичным для любого из сгенерированных классов, которые будут применять этот интерфейс к ним ... а затем просто использовать общие дозвуковые методы rerieve ICustomerEntity, а не конкретный класс ..

Например, вы можете сделать общий метод, называемый GetCustomerEntity с ограничением T:ICustomerEntity, которая будет возвращать IQueriable с bascic запроса по сравнению с CUSTOMERID один из зарегистрированных пользователей ..

Надеюсь, это поможет ...

+1

Ницца, мне это нравится. – jvenema

Смежные вопросы