【问题标题】:How can I query a DbSet so that it returns both Local and non-Local data如何查询 DbSet 以便它返回本地和非本地数据
【发布时间】: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&lt;...&gt; - 如果您的MyDbContext.MyEntity 是DbSet,这是不可能的<...>(实现 IQueryable<..>)。

标签: .net vb.net entity-framework linq linq-to-entities


【解决方案1】:

问题是我使用的是 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 2014-02-17
    • 2015-05-02
    相关资源
    最近更新 更多