2013-09-03 3 views
2

У меня есть следующая настройка базы данных. То, что я надеюсь выполнить, - это поиск рабочего на вкладке «Рабочие» и возврат всех бизнес-приложений, которые результирующий пользователь попадет под диаграмму. Я надеюсь сделать это в выражении Lambda и вернуть сущности BusinessArea верхнего уровня. В случае необходимости я мог бы заставить рабочих и через ряд процессов вернуться к уровню, который я хочу, но это потребует от меня повторения на разных уровнях, пока я не доберусь до верхнего уровня.Получить объект верхнего уровня, основанный на критериях нижнего уровня, выполняемых

enter image description here

+1

Каков ваш запрос? –

+0

К сожалению, у меня его еще нет. Я думал, что могу сделать что-то вроде этого, но я не очень далек от него, потому что intelsense останавливается в конце WorkerProcess, насколько доступны мои доступные объекты. – Tyddlywink

+0

Извините, что попал в ближайшее время. Вот о чем я говорил. WFE.Workers.Where (c => c.UserID == Environment.UserName). Выбрать (c => c.WorkerProcesses .....) – Tyddlywink

ответ

2

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

var results = WFE.BusinessAreas 
    .Where(ba => ba.Processes 
     .Any(p => p.WorkerProcesses 
      .Any(wp => wp.UserId == "pmarshall"))); 

Или в синтаксисе запроса:

var results = 
    from ba in WFE.BusinessAreas 
    where ba.Processes.Any(p => p.WorkerProcesses.Any(wp => wp.UserId == "pmarshall")) 
    select ba; 

Или альтернативно :

var results = 
    from ba in WFE.BusinessAreas 
    from p in ba.Processes 
    from wp in p.WorkerProcesses 
    where wp.UserId == "pmarshall" 
    select ba; 

Если вы хотите, чтобы найти все районы для всех пользователей, вы хотите сделать что-то вроде этого:

var results = 
    (from ba in WFE.BusinessAreas 
    from p in ba.Processes 
    from wp in p.WorkerProcesses 
    select new { ba, wp.UserId }) 
    .Distinct() 
    .ToLookup(x => x.UserId, x => x.ba); 

И тогда вы можете получить доступ к результатам для одного пользователя с помощью results["pmarshall"].

+0

Это прекрасно. Огромное спасибо за помощь. – Tyddlywink

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