У меня есть три таблицы, к которым я хотел бы обратиться: потоки, записи и FieldInstances.
Я хочу получить список записей внутри потока. Поток может быть блогом или страницей и т. Д., И запись является фактическим экземпляром потока, то есть: «поток: запись страницы: Добро пожаловать» или «поток: запись в блоге: новости о чем-то».
Дело в том, что каждая запись имеет настраиваемое поле данных, связанное с ней через FieldInstance. IE:
поток: страница
запись: Добро пожаловать
fieldInstance: добро пожаловать Путь к изображению
Я пытаюсь найти лучший способ получить список всех записей внутри одного потока, а также иметь экземпляры настраиваемых полей, которые связаны с каждой записью.
Я играл с таким кодом:
var stream = genesisRepository.Streams.First(x => x.StreamUrl == streamUrl);
IQueryable<StreamEntry> entry = genesisRepository.StreamEntries.Where(x => x.StreamID == stream.StreamID);
IQueryable<FieldInstance> fieldInstances = genesisRepository.FieldInstances.Where(
// doesn't work because entry is basically returning a collection of some kind.
// and i can't figure out how to compare a single ID with a list/collection of IDs
x => x.fiStreamEntryID == entry.Where(e => e.StreamID == stream.StreamID)
);
Это, конечно, не работает. Изначально я думал о том, чтобы получить все записи в потоке, а затем все fieldInstances в потоке, а затем я буду отображать данные с использованием лямбда-выражений после того, как у меня будет все ... надеюсь, что количество запросов к SQL будет равно двум или трем. Но я не могу понять, как написать linqTOsql для выполнения всего лишь двух или трех запросов. Я продолжаю думать, что мне нужно выполнять запросы в цикле, чтобы получить fieldInstances для каждой записи.
Существует ли запрос LinqTOsql, который выберет все fieldInstances, где StreamEntryID (fk) находится в списке записей, чей (fk) StreamID совпадает с Stream?