【问题标题】:How do I reference a field in LINQ that is named using a reserved word?如何引用 LINQ 中使用保留字命名的字段?
【发布时间】:2011-08-22 20:52:08
【问题描述】:

表:UserTypes

字段:row,name,Type

此代码不起作用:

 Int64 row = 1;
var myType = (from b in dc.UserTypes where b.Row == user.Row  select b).Single();
myType.Type = "personalPage";
dc.SubmitChanges();

但是,这段代码确实...
dc.ExecuteQuery<UserType >("update dbo.UserType set Type='personalPage' where row={0}",user.Row);

我收到此错误:

键入的单词是保留的单词。我不能使用单词Type

编辑

dbml

  [Table(Name="dbo.UserType")]
  public partial class UserType
 {

     private long _Row;

     private string _Type;

     public UserType()
     {
     }

     [Column(Storage="_Row", DbType="BigInt NOT NULL")]
     public long Row
     {
     get
      {
        return this._Row;
       }
     set
       {
        if ((this._Row != value))
        {
            this._Row = value;
        }
        }
    }

    [Column(Storage="_Type", DbType="NVarChar(500) NOT NULL", CanBeNull=false)]
    public string Type
     {
    get
    {
        return this._Type;
    }
    set
    {
        if ((this._Type != value))
        {
            this._Type = value;
        }
    }
    }

}               

【问题讨论】:

  • 是的。这就是为什么使用 type 等保留字作为字段名称是一个坏主意的原因。
  • 如果您使用 IDE 设置映射 (DBML),它通常会自动获取此权限...
  • @JohnFx - 在他的辩护中,这是一个 C# 保留字而不是 SQL 一个 - 也许他是一个 DB 人,但不是一个 OO 程序员。
  • 我怀疑您是否收到“键入单词是保留的单词。我不能使用用户单词类型”作为错误。请发布确切的错误消息。请非常具体地说明您从何处收到此消息。是在运行时,还是在编译时。由于“类型”不是 SQL Server 上的保留字,所以这里没有加起来。
  • @JNK 如果他们不是 OO 程序员,那他们为什么要编写代码?

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


【解决方案1】:

进入您的 LINQ to SQL DBML 映射并将 UserType.Type 的映射从名为“Type”的列更改为名为“[Type]”的列。您可以在设计器中执行此操作,也可以手动执行。

【讨论】:

    【解决方案2】:

    您可以在代码中将其引用为UserType.@Type

    【讨论】:

    • 谢谢!我有类似的情况,我正在使用一个名为“事件”的表的遗留数据库。这是救命稻草。我们正在考虑使用表别名、特殊视图等。使用 @event.Where(...) 就可以了。
    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 2015-08-31
    • 2013-09-25
    • 1970-01-01
    • 2018-12-07
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多