Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите составить LINQ-запрос

17K
27 сентября 2014 года
Suleyman
12 / / 15.06.2008
есть три коллекции

 
Код:
Dictionary<int, string> sn_offices;
Dictionary<string, string> region_offices;
Dictionary<string, string> subdistrict_region;
где первая коллекция хранит отношение "серийный номер - контролирующая организация",
во второй коллекции хранится зависимость "область - контролирующая организация" (организация может курировать несколько областей),
в третей коллекции хранится зависимость "район - область" (в одной области находится несколько районов).

Получить все серийные номера для определённой области я могу с помощью следующей конструкции:
 
Код:
var serials =
                from office in sn_offices
                join reg in region_offices.Where(r => r.Key == "Московская обл.")
                on office.Value equals reg.Value into regGroup
                from rg in regGroup
                select tu.Key;
Как к вышепоказанному запросу добавить ещё сортировку и по определённому району (Key в коллекции) из коллекции "subdistrict_region"?
Если возможно покажите вариант в linq-синтаксисе и lambda-синтаксисе. Предпочтительно в linq-синтаксисе. (lambda интересует только в образовательных целях).
17K
28 сентября 2014 года
Suleyman
12 / / 15.06.2008
В приведённом виде - задача не имеет решения, так как нет возможности сопоставить серийный номер к району и области.
Переделал структуру данных к виду

 
Код:
var listSN = Dictionary<int, string[]>();
listSN.Add(1, new[]{"ОрганизацияХ", "областьХ", "регионХ"});
Поиск и обработка данных по такой структуре решается простыми linq-запросами.

Для примера поиск серийных номеров по определённой организации:
 
Код:
var sn =
    from sn in listSN
    where sn.Value[0] == "название искомой организации"
    select sn.Key;
поиск по определённой области:
 
Код:
var sn =
    from sn in listSN
    where sn.Value[1] == "искомая область"
    select sn.Key;
и т.д.

Всем спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог