我想查询三个表:Streams,Entries和FieldInstances。
我想要获取流中的条目列表。 Stream可以是博客或页面等。条目是流的实际实例,即:“stream:Page entry:Welcome”或“stream:blog entry:news about somthing”。
问题是,每个条目都有通过FieldInstance与之关联的自定义数据字段。 IE:
stream:Page 进入:欢迎 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,然后在我拥有所有内容后,我将使用lambdas显示数据...希望将sql查询dows保持为两个或三个。但我无法弄清楚如何编写linqTOsql只在两三个查询中执行。我一直认为我需要在循环中执行查询以获取每个条目的fieldInstances。
是否有LinqTOsql查询将选择所有fieldInstances,其中StreamEntryID(fk)位于其(fk)StreamID与Stream匹配的条目列表中?
答案 0 :(得分:1)
抱歉,我在第三个声明中并没有完全了解您要加入的列,但是:
var stream = genesisRepository.Streams.First(x => x.StreamUrl == streamUrl);
IQueryable<StreamEntry> entries = genesisRepository.StreamEntries.Where(x => x.StreamID == stream.StreamID);
IQueryable<FieldInstance> fieldInstances = from entry in entries
from instance in genesisRepository.FieldInstances
where entry.entryId == instance.fiStreamEntryID
select instance;
答案 1 :(得分:0)
这有帮助吗?我仍然是EF的新手,但这就是我对它有所了解......
var results = genesisRepository.FieldInstances
.Include("StreamEntry.Stream")
.Where(fi => fi.StreamEntry.Stream.StreamUrl == streamUrl);