Использование Linq для выбора списка объектов, связанных объектов, связанных объектов
Вопрос
Прошу прощения за плохое название вопроса - я не уверен, как описать то, что я делаю, но это лучшее, что я мог придумать, пожалуйста, отредактируйте это, если у того, что я прошу, есть настоящее имя!
У меня есть Программы, которым может быть назначена группа Проектов, которым, в свою очередь, назначены группы Результатов.
Я хотел бы получить все результаты для Программы через ее проекты в виде одного большого списка результатов.У меня есть это:
From pp In Me.ProgrammeProjects Select pp.Project.Outputs
Что в основном дает мне список выходных списков.(Ienumerable Of EntitySet Вывода).
Я грубо пробиваюсь через Linq и не могу найти никаких примеров этого (или не могу распознать ни одного, когда вижу его).Как я могу сделать это, используя только Linq, а не for loops и Linq, где я бы просматривал каждый EntitySet и добавлял его содержимое в больший список?
Спасибо
Решение
Или пойти против контекста linq напрямую:
from o in context.Outputs
where o.Project.ProgrammeProjects.ID = 1
select o
Обратное тоже будет работать: запрос прямо из таблицы контекста данных.
Другие советы
Вы пытаетесь получить список результатов конкретной программы?
Если да, попробуйте что-то вроде этого:
var result = (from pp in ProgrammeProjects
where pp.Name.Equals("ProjectA")
select pp.Project.Outputs).ToList();
или
как только вы получите список результатов, вы можете использовать лямбда-выражение для получения подмножества.
var result = (from pp in ProgrammeProjects
select pp.Project.Outputs).ToList();
var subResult = result.FindAll(target => target.OutputParameter.Equals("findThisValue");
Это то, что ты пытаешься сделать?
Если нет, дайте немного больше подробностей о структуре данных и о том, что вы пытаетесь получить, и я сделаю все возможное, чтобы помочь.
Патрик.
Я прибегал к этому именно так, но могу сказать, что это будет медленно, когда объем данных увеличится.
Dim allOutputs As New Generic.List(Of Output)
Dim outputLists = From pp In Me.ProgrammeProjects Select pp.Project.Outputs.ToList
For Each outputList In outputLists
Dim os = From o In outputList Where o.OutputTypeID = Type Select o
allOutputs.AddRange(os)
Next
Return allOutputs
Я все еще немного сбит с толку относительно того, какие данные вы пытаетесь извлечь.Вот что я понимаю.
- У вас есть список программ
- Каждая программа может состоять из множества проектов
- Каждый проект может иметь множество результатов.
Цель:Чтобы найти все выходные данные определенного типа.Правильно ли это?
Не похоже, что вы извлекаете какие-либо данные, связанные с проектом или программой, поэтому что-то вроде этого должно сработать:
Dim allOutputs As Generic.List(Of Outputs) = (From output In Me.Outputs Where output.OutputType.Equals(Type) Select output).ToList()
Дай мне знать, как все пройдет.
Патрик.