C# Linq导致Top(1)出现语法错误
我有一个使用linq的EF上下文,它正在不同类型的多个sql服务器上执行。我发现,linq在sql server 2000框上导致语法错误,因为C# Linq导致Top(1)出现语法错误,c#,.net,sql,sql-server,linq,C#,.net,Sql,Sql Server,Linq,我有一个使用linq的EF上下文,它正在不同类型的多个sql服务器上执行。我发现,linq在sql server 2000框上导致语法错误,因为.FirstOrDefault()的linq转换正在转换为使用选择TOP(1)的sql而不是选择TOP 1,括号似乎是导致此语法错误的原因,因为sql server 2000在此上下文中不支持括号 是否可以强制linq使用SELECT TOP 1而不是SELECT TOP(1)?您可以使用ToList()。订购后采用(1)方法。注意,EF似乎不支持SQL
.FirstOrDefault()
的linq转换正在转换为使用选择TOP(1)的sql
而不是选择TOP 1
,括号似乎是导致此语法错误的原因,因为sql server 2000在此上下文中不支持括号
是否可以强制linq使用
SELECT TOP 1
而不是SELECT TOP(1)
?您可以使用ToList()。订购后采用(1)
方法。注意,EF似乎不支持SQL Server 2000请参阅:请参阅另请仅查看注释。去免费的SQL Express是一个选项吗?它不会正确地转换查询,它只会获取所有项目。此外,如果您真的想将Take
转换为linq to objects,您可以使用AsEnumerable
而不是ToList
来避免将整个查询带到一个数据结构中,这样您就可以扔掉它。@J.Steen好吧,它首先被SchmitzIT
批准,但没有人拒绝,因此,对审查制度的反思仍然很糟糕,但是是的。。。谢谢你提到它;我直到现在才看编辑历史。@Servy,我的缺点是没有深入到足够的深度。。)要完全复制.FirstOrDefault()
而不将FirstOrDefault()
传递给查询解析器,需要.Take(1).AsEnumerable.FirstOrDefault()
,这可能是编辑考虑的一般想法。这一切都是假设Take(1)
没有同样的问题。@Jonhana好吧,鉴于评论指出数据库提供程序不受EF支持,即使这一个示例可以工作,OP可能仍然应该停止使用它;他不可能总是能够让它发挥作用,并且能够依靠这一事实。