Расширить IQueryable структуру SubSonic (через LINQ?) - PullRequest
2 голосов
/ 17 мая 2010

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

Я работаю с 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 Ответ

1 голос
/ 04 мая 2011

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

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

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

...