【发布时间】:2016-01-02 13:51:30
【问题描述】:
我想查询我的实体 DbSet 并从本地上下文和数据库中获取结果。
我有这个问题:
Dim lResults = MyDbContext.MyEntity.Local.Where(Function(x) x.ParentId = lId)
但这只会给我以前加载的元素的结果。
我希望它同时对本地和非本地数据运行查询。
我不想做MyDbContext.MyEntity.Load(),因为这会加载数据库中的所有行,在我的情况下可能是数千行。
编辑:
我意识到这是因为我实际上做了以下事情:
Dim lExpression = Function(x) x.ParentId = lId
Dim lResults = MyDbContext.MyEntity.Where(lExpression).ToList()
这样,表达式是否不被评估?
EDIT2:
问题是我使用的是 Func 而不是 Epxression。 Func 无法转换为 SQL,因此它会检索整个数据集,然后对其进行过滤。
【问题讨论】:
-
为什么不
MyDbContext.MyEntity.Where(Function(x) x.ParentId = lId).Load()? -
Error 196 'Load' is not a member of 'System.Collections.Generic.IEnumerable(Of MyEntity)'虽然 ToList() 确实有效,但它会从数据库中加载所有内容。 -
我不明白。
MyEntity.Where应该返回一个IQueryable。 -
@Oszkar 看起来你尝试过这个
MyDbContext.MyEntity.Local.Where(Function(x) x.ParentId = lId).Load()- 当然这不起作用,删除本地。 -
您在上面的评论中发布的关于
System.Collections.Generic.IEnumerable的错误 - 这意味着Where子句解析为IEnumerable<...>- 如果您的MyDbContext.MyEntity是DbSet,这是不可能的<...>(实现 IQueryable<..>)。
标签: .net vb.net entity-framework linq linq-to-entities