【问题标题】:Linq causes syntax error with Top (1)Linq 导致 Top (1) 出现语法错误
【发布时间】:2012-11-16 14:32:37
【问题描述】:

我有一个使用 linq 的 EF 上下文,它正在多个不同类型的 sql 服务器上执行。我发现 linq 导致 sql server 2000 框出现语法错误,因为 .FirstOrDefault() 的 linq 翻译被翻译成使用 SELECT TOP (1) 而不是 SELECT TOP 1 的 sql,并且似乎括号导致此语法错误,因为它们在 sql server 2000 的上下文中不受支持。

是否可以强制 linq 使用 SELECT TOP 1 而不是 SELECT TOP (1)

【问题讨论】:

标签: c# .net sql sql-server linq


【解决方案1】:

下单后即可使用ToList().Take(1)方式。

【讨论】:

  • 这不会正确翻译查询,它只会获取所有项目。此外,如果您真的只想将 Take 转换为 linq 到对象,您可以使用 AsEnumerable 而不是 ToList 来避免将整个查询放入数据结构中,这样您就可以将其丢弃。跨度>
  • @J.Steen 好吧,它首先被SchmitzIT 批准,没有人拒绝,所以仍然是对审查系统的不良反映,但是是的......谢谢你提到它;直到现在我才查看编辑历史记录。
  • @Servy 不过,我的 deep 不够深入。 ;)
  • 要完全复制.FirstOrDefault() 而不将FirstOrDefault() 传递给查询解析器,可能需要.Take(1).AsEnumerable.FirstOrDefault(),这可能是编辑器的总体思路。这一切都假设Take(1) 没有同样的问题。
  • @JonHanna 好吧,鉴于 cmets 声明 EF 不支持数据库提供程序,即使可以使这个示例正常工作,OP 可能仍应停止使用它;他不会总是能够让它工作并能够依赖这个事实。
猜你喜欢
  • 2018-05-16
  • 2014-11-03
  • 2019-02-20
  • 2022-01-21
  • 1970-01-01
  • 2023-02-13
  • 2019-06-05
  • 2014-08-21
  • 1970-01-01
相关资源
最近更新 更多