【问题标题】:SubSonic3: Method "FirstOrDefault" throws exception with SQL Server 2000SubSonic3:方法“FirstOrDefault”在 SQL Server 2000 中引发异常
【发布时间】:2009-09-09 06:52:56
【问题描述】:

我在 SQL Server 2000 中使用 SubSonic3。

我对“FirstOrDefault”方法有疑问 - 它总是抛出异常 =“第 1 行:SubSonic.Linq dll 中的 '('." 附近的语法不正确

编辑(从评论中添加代码):

InventoryDAL = DAL project name (dll) 
Inventort= Subsonic3 Gnerated classes 
Name space WHWarehouses = gnerated object 

Dim WareH = (From Wh In InventoryDAL.Inventort.WHWarehouses.All _ 
  Where Wh.WarehouseID = 1 ).FirstOrDefault

【问题讨论】:

  • 您可以使用 SQL Profiler 查看 Sql server 上正在执行的操作吗?
  • 如果您可以添加一些代码来显示您正在做什么,我们会更好地为您提供帮助。
  • 是的 - 绝对 - 向我们展示你的代码 sn-p 进行这个调用!
  • InventoryDAL = DAL 项目名称 (dll) Inventort= Subsonic3 生成的类名称空间 WHWarehouses = 生成的对象 Dim WareH =(来自 Wh In InventoryDAL.Inventort.WHWarehouses.All _ Where Wh.WarehouseID = 1)。 FirstOrDefault
  • 你不需要像 FirstOrDefault() 那样关闭 FirstOrDefault;

标签: sql-server vb.net linq sql-server-2000 subsonic3


【解决方案1】:

我不知道 SubSonic,但是 Hibernate 有不同的 SQL 方言,你可以告诉它使用,可能想看看有没有办法告诉它使用 SQL 2000 的方言

【讨论】:

    【解决方案2】:

    这也是我遇到的问题,不幸的是生成 TOP 的代码是在 SubSonic Dependency 中生成的,无法在 TT 模板中更改。

    TSqlFormatter.cs类下的SubSonic源码中是一个方法

    protected override Expression VisitSelect(SelectExpression select)
    

    ...

    if (select.Take != null)
                {
                    sb.Append("TOP (");
                    this.Visit(select.Take);
                    sb.Append(") ");
                }
    

    ....

    删除 db.Append 中的括号应该可以解决 SQL 的问题,但我不确定这是否会破坏其他提供程序,例如 SQL Compact Edition?

    我在这里提出了这个问题:SubSonic Bug with TOP keyword? 在我阅读您的查询之前。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      相关资源
      最近更新 更多