2015-10-05 66 views
0

我想查询我的实体DbSet并从本地上下文和数据库中获取结果。如何查询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,因此它会检索整个数据集并对其进行过滤。

+1

为什么不'MyDbContext.MyEntity.Where(功能(X)= x.ParentId LID).Load()'? –

+0

'错误“负载”不是的成员“System.Collections.Generic.IEnumerable(中myEntity所)”' 虽然一个ToList()的工作,但它从数据库加载的一切。 – Oszkar

+0

我不明白。 'MyEntity.Where'应该返回'IQueryable'。 –

回答

0

问题是我使用Func而不是Epxression。 Func不能转换为SQL,因此它会检索整个数据集并对其进行过滤。

解决的办法是:

Dim lExpression As Expression(Of Func(Of MyEntity, Boolean)) = Function(x) x.ParentId = lId 
Dim lResults = MyDbContext.MyEntity.Where(lExpression).ToList()