我有一个实体集,它是调查的会话。还有一个响应集合的导航属性,这些响应也是一个问题实体的键控(使用数据库中的外键关系)。
通过简单地执行
,我很容易调出回复集合session.Responses
返回一个枚举列表,在大多数情况下都可以。
但是,对于大型数据集,我遇到了一个概念问题。
如果我想根据一个Item从Session的Response集合中选择一个特定的响应,假设它是一个集合,那么它是一个搜索还是扫描操作?响应和问题之间的FK关系是否得到充分利用?
如果没有,在Session Partial类中创建一个Keyed Dictionary是明智的,它会使用它的Response集合并将其与Question Keys配对吗?这样,它会直接寻求产生每个请求问题的确切响应。
答案 0 :(得分:0)
LINQ over对象使用Enumerators
,它“扫描”集合。
编辑:最好的办法是尽可能在数据库中进行逻辑加入和过滤。当您使用EF查询表达式的结果加载Dictionary时,将在数据库上执行查询并将结果放入内存中。此时您不再处理IQueryable表达式,而是处理IEnumerable对象集。字典上的其他LINQ表达式是LINQ over objects。