【问题标题】:LINQ puts unwanted trailing spaces on stringsLINQ 在字符串上放置不需要的尾随空格
【发布时间】:2010-12-25 03:57:40
【问题描述】:

我有一个非常烦人的 LINQ 和 MS SQL Server 问题。

我目前正在用 WPF C# 制作一些软件,并使用 LINQ 从数据库中的数据生成类。

但是,当我从程序更新数据库中的 nvarchar 或 varchar 字段时,LINQ 会在字符串中添加尾随空格!

我在表中有一个字段,定义如下:

ProductName = NVARCHAR(10)

如果我这样做:

Product.Name = "Bike";
Product.Name = Product.Name.Trim();
repository.Add(Product);   // Runs an .InsertOnSubmit
repository.Save();         // Runs a .SubmitChanges

那么 DB 中的结果数据是 "Bike[SPACE][SPACE][SPACE][SPACE][SPACE][SPACE]" 其中 [SPACE] 只是一个空格(不能在此文本中写​​入多个空格在这里)。

为什么要这样做,我如何让它停止添加那些烦人的尾随空格?

提前致谢

【问题讨论】:

  • 确定不是 NCHAR(10) 字段吗?

标签: sql-server linq spaces


【解决方案1】:

如果我没记错的话,我遇到了同样的问题……这不是因为 linq,而是因为列类型。请尝试将其更改为 VARCHAR。

【讨论】:

  • 正如我在问题中所写,数据库使用 NVarChar。但是,我发现了问题。
【解决方案2】:

自动生成的 LINQ 类以下列方式定义 NVarchar 字段:

[Column(Storage="_Text", DbType="NChar(20) NOT NULL", CanBeNull=false)]
public string Text
{
get
{
    return this._Text;
}
set
{
    if ((this._Text != value))
    {
        this.OnTextChanging(value);
        this.SendPropertyChanging();
        this._Text = value;
        this.SendPropertyChanged("Text");
        this.OnTextChanged();
    }
}
}

列设置应该在哪里:

[Column(Storage="_Text", DbType="NVarChar(20) NOT NULL", CanBeNull=false)]

出现问题是因为我在没有重新生成 LINQ 类的情况下更新了 SQL 数据库中的类型。

【讨论】:

    【解决方案3】:

    Nchar 也做同样的事情。

    这些类型填补空白:Nchar 和 Nvarchar

    我已经转换了我的数据库并更新了我的模型。全部修复。

    检查...

    What is the difference between char, nchar, varchar, and nvarchar in SQL Server?

    如果您不想更改模型,可以使用 mssql 修剪功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 2018-09-26
      • 1970-01-01
      • 2012-04-16
      • 2016-01-21
      • 2020-08-16
      相关资源
      最近更新 更多