Использование Linq для выбора списка сущностей, связанных сущностей, связанных сущностей - PullRequest
0 голосов
/ 28 января 2010

Извините за плохое название вопроса - я не знаю, как описать то, что я делаю, но это лучшее, что я могу придумать, пожалуйста, отредактируйте его, если у того, что я прошу, есть настоящее имя!

У меня есть Программы, которым может быть назначена группа проектов, которым, в свою очередь, назначены группы выходов.

Я хотел бы получить все результаты для Программы через ее проекты в виде одного большого списка результатов. У меня есть это:

From pp In Me.ProgrammeProjects Select pp.Project.Outputs

Что в основном дает мне список выходных списков. (Бесчисленное множество выходных данных).

Я грубо пробираюсь через Линк и не могу найти никаких примеров этого (или не могу распознать один, когда увижу это). Как я могу сделать это, используя только Linq, а не циклы и Linq, где я бы прошел каждый EntitySet и добавил его содержимое в больший список?

Спасибо

Ответы [ 4 ]

1 голос
/ 28 января 2010

Или пойти против контекста linq напрямую:

from o in context.Outputs
where o.Project.ProgrammeProjects.ID = 1
select o

Обратное тоже будет работать и делать запросы прямо из таблицы контекста данных.

0 голосов
/ 29 января 2010

Я все еще немного озадачен тем, какие данные вы пытаетесь получить. Вот что я понимаю.

  1. У вас есть список программ
  2. Каждая программа может иметь несколько проектов
  3. Каждый проект может иметь много выходов.

Цель: найти все выходы определенного типа. Это правильно?

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

   Dim allOutputs As Generic.List(Of Outputs) = (From output In Me.Outputs Where output.OutputType.Equals(Type) Select output).ToList()

Дайте мне знать, как это происходит.

Patrick.

0 голосов
/ 29 января 2010

Я так и прибегаю к этому, но могу сказать, что при увеличении объема данных он будет медленным.

    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
0 голосов
/ 28 января 2010

Вы пытаетесь получить список выходов для конкретной программы?

Если это так, попробуйте что-то вроде этого:

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");

Это то, что вы пытаетесь сделать?

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

Patrick.

...