【问题标题】:Entity Framework: Find on Where实体框架:在哪里查找
【发布时间】:2020-07-29 17:45:13
【问题描述】:

我必须首先对数据进行过滤,我对 where 进行过滤,然后在其中找到一个特定的匹配项并将其返回。

我知道你可以做一个 Where().First()。但这不知何故忽略了这样一个事实,即我实际上在 Where() 子句的返回值中只有唯一值。因此,我想使用 Find(),只是为了非常清楚,只有一个结果,并且您不会在 First() 调用后面隐藏任何结果。

问题

  1. 为什么不能执行 Where().Find()?
  2. 什么是好的解决方法?

注意在 Where() 调用完成过滤后,这些值首先是唯一的。

【问题讨论】:

    标签: entity-framework asp.net-core


    【解决方案1】:

    您应该使用 Single/SingleAsync 或 SingleOrDefault/SingleOrDefaultAsync。 例如,您可以编写查询:

    context.Items.Single(e => e.id == id)
    

    如果没有项目或多个项目的条件为真,它将返回单个项目和异常。

    你也可以使用 SingleOrDefault ,如果没有找到项目,它将返回 null,但当找到多个项目时,它仍然会返回异常。

    你可以在这里找到一个例子:https://docs.microsoft.com/en-us/ef/core/querying/

    【讨论】:

    • 对不起,必须更清楚一点。在使用 Where() 调用完成过滤后,数据行首先是唯一的。
    • @7heViking 这里的重点是.Single(predicate).Where(predicate).Single() 相同。 .Where() 调用不过滤,它只构建一个查询。只有在您开始枚举结果时才会执行您的查询。 .Single() 可以做到这一点,并且可以在一个呼叫中处理过滤。
    猜你喜欢
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多