Мы хотим создать каталог всех организаций, работающих с нами. Они невероятно разнообразны (правительство, посольства, частные компании и организации в зависимости от них). Итак, я решил создать 2 таблицы. Таблица 1 будет одинаково относиться ко всем организациям, то есть будет собирать всю основную информацию (имя, адрес, номер телефона и т. Д.). Таблица 2 установит иерархию среди всех организаций. Например, Программа для неграмотных взрослых зависит от Национального института социального обеспечения , который зависит от труда Министерство .
В таблице иерархии каждый столбец представляет уровень. Так, для приведенного выше примера, (i) Министерство труда - Уровень 1 (столбец 1), (ii) Национальный институт социального обеспечения - Уровень 2 (столбец 2), (iii) Программа для неграмотных взрослых - Уровень 3 (столбец 3).
Чтобы прикрепить организацию к иерархии, пользователь должен переходить уровень за уровнем (т.е. столбец за столбцом). Итак, будет как минимум 3 ситуации:
- Если для организации существует адекватная иерархия (например, уровень 1: посольство США), эту организацию можно добавить (например, уровень 2: USAID) .--> Посольство США / USAID и т. Д.
- Как насчет того, если один или несколько уровней отсутствуют? - тогда их нужно добавить
- Как насчет того, нужно ли изменить иерархию? - не каждая вещь нуждается в модификации.
У меня нет выбора, кроме как работать по уровню (то есть столбец за столбцом). Мне не имеет смысла иметь все уровни в одной форме, так как пользователю необходимо перемещаться по иерархиям, чтобы найти подходящий для присоединения организации.
Допустим, у меня есть эти запросы в моем хранилище (просто, чтобы вы поняли).
Query1
var orgHierarchy = (from orgH in db.Hierarchy
select orgH.Level1).FirstOrDefault;
Query2
var orgHierarchy = (from orgH in db.Hierarchy
select orgH.Level2).FirstOrDefault;
Query3, Query4 и т. Д.
Вышеуказанные запросы одинаковы, за исключением запрошенного свойства (level1, level2, level3 и т. Д.)
Вопрос: Есть ли общий способ написания вышеупомянутых запросов в одном? Чтобы пользователь мог отслеживать уровень иерархии по уровням, чтобы присоединить организацию.
Другими словами, заранее не зная, какой столбец запрашивать, мне все равно нужно это делать в зависимости от некоторых условий. Например, организация X зависит от Y . Зная, что Y находится где-то на 3-м уровне, я перейду на 4-й уровень, связав X с Y .
Мне нужно выбрать (не вручную) столбец только с одним запросом, который принимает параметры.
=======================
EDIT
Как я только что сказал @Mark Byers, все, что я хочу, это просто иметь возможность запрашивать столбец, не зная заранее, какой из них. Проверьте это:
Как насчет этого
Public Hierarchy GetHierarchy(string name)
{
var myHierarchy = from hierarc in db.Hierarchy
where (hierarc.Level1 == name)
select hierarc;
retuen myHierarchy;
}
Выше запрос зависит от имени, которое является переменной. Это может быть министерство планирования, посольство, местный телефон и т. Д.
Могу ли я написать тот же запрос, но на этот раз вместо просмотра большого значения в БД я навязываю свой запрос для выбора определенного столбца.
var myVar = from orgH in db.Hierarchy
where (orgH.Level1 == "Government")
select orgH.where(level == myVariable);
return myVar;
Я не претендую на то, что select orgH.where (level == myVariable) даже близок к действительности. Но это то, что я хочу: иметь возможность выбирать столбец в зависимости от переменной (то есть значение не известно заранее, как с name ).
Спасибо за помощь