Использование Linq для выбора списка объектов, связанных объектов, связанных объектов

StackOverflow https://stackoverflow.com/questions/2155782

  •  23-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

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

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

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

Патрик.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top