gpt4 book ai didi

c# - 为什么我们不能在 Entity Framework 查询中使用数组?

转载 作者:太空宇宙 更新时间:2023-11-03 23:13:52 24 4
gpt4 key购买 nike

我知道 Entity Framework 查询不能包含数组。例如,这将失败:

var myRow = DbContext.myTable.Single(d => d.Property1 == myArray[0].Property1);

但是如果我像这样首先将该元素分配给一个变量:

var property1 = myArray[0].Property1;
var myRow = DbContext.myTable.Single(d => d.Property1 == property1);

然后就可以了。为什么编译器不能为我们做这件事?它已经进行了优化,并在许多其他情况下通过语法糖为我们提供了捷径。是否存在歧义源会阻止编译器将数组元素复制到后台的临时变量中?还是其他什么原因?

最佳答案

Linq-to-objects 可以很好地处理 - linq-to-EF(或 Linq-to-SQL)会尝试将表达式转换为 SQL。将值放在变量中会告诉提供者您要使用该值,而不是计算表达式。

Why can't the compiler do this for us?

因为编译器没有被编程来区分应该被翻译成 SQL 的表达式和那些应该在编译查询之前被评估的表达式。

Linq 查询使用延迟执行,这意味着在您请求结果之前,查询实际上不会执行。在那之前,它只是一个由构成过滤器、投影、分组、聚合等的单个表达式组成的查询。当它计算表达式时 d => d.Property1 == myArray[0].Property1 它当时计算表达式,所以当提供者到达它时,它会尝试将它转换为 SQL,但它不能这样做。

关于c# - 为什么我们不能在 Entity Framework 查询中使用数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37949820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com