По умолчанию при открытии формы на LookUp отображается полный список объектов, из которых необходимо выбрать значение. Однако, зачастую возникает ситуация, когда отображать полный список нельзя.

Следовательно, возникает вопрос: каким образом ограничить выводимые данные при поднятии на LookUp?

Пример 1

Пусть дана следующая диаграмма.

При создании нового объекта типа Кредит необходимо выбрать Клиента, которому выдается данный кредит. Например, что введено ограничение: выдавать кредиты только лицам, проживающим в городе Перми (т.е. если Прописка Клиента содержит в себе “Пермь”).

Построить ограничение, используя LINQProvider:

var ds = (SQLDataService) DataServiceProvider.DataService;
IQueryable<Клиент> limit = ds.Query<Клиент>(Клиент.Views.КлиентL).Where(klient => klient.Прописка.Contains("Пермь"));

Затем получить ограничивающую функцию, используя класс LinqToLcs:

Function onlyPermKlients = LinqToLcs.GetLcs(limit.Expression, Клиент.Views.КлиентL).LimitFunction;

Ограничить LookUp, установив поле LimitFunction:

ctrlКлиент.LimitFunction = onlyPermKlients;

В результате, при открытии лукап-формы Клиентов с этой страницы будут отображаться только Клиенты, у которых встречается слово “Пермь” в поле “Прописка”.

Пример 2

Более сложная задача: пускай прописка представляет собой отдельный класс, таким образом, необходимо наложить ограничение на мастер мастера:

Дополнительно, необходимо отображать только работающих КредитныхИнспекторов.

1.Построить ограничения, испльзуя LINQ-провайдер:

var ds = (SQLDataService) DataServiceProvider.DataService;
IQueryable<Клиент> limit1 = ds.Query<Клиент>(Клиент.Views.КлиентL).Where(klient => klient.Прописка.Город == "Пермь");
IQueryable<КредитныйИнспектор> limit2 = ds.Query<КредитныйИнспектор>(КредитныйИнспектор.Views.КредитныйИнспекторL).Where(insp => insp.Работает);

2.Получить ограничивающие функции:

Function onlyPermKlients = LinqToLcs.GetLcs(limit1.Expression, Клиент.Views.КлиентL).LimitFunction;
Function onlyWorkingInspektors = LinqToLcs.GetLcs(limit2.Expression, КредитныйИнспектор.Views.КредитныйИнспекторL).LimitFunction;

3.Устанавливаем ограничения на LookUpы для Клиентов и Инспекторов:

ctrlКлиент.LimitFunction = onlyPermKlients;
ctrlКредитныйИнспектор.LimitFunction = onlyWorkingInspektors;