代码之家  ›  专栏  ›  技术社区  ›  marc

当使用Linq to SQL和存储过程时,char(1)列必须作为c#字符返回吗?

  •  1
  • marc  · 技术社区  · 17 年前

    当使用Linq到SQL和存储过程时,为描述proc的结果集而生成的类使用char属性来表示SQL proc中的char(1)列。我宁愿这些是字符串——有什么简单的方法可以做到这一点吗?

    4 回复  |  直到 17 年前
        1
  •  3
  •   James Curran    17 年前

    您可以修改{database}.designer.cs文件。我没有一个方便的检查,但我相信它相当简单——你只需要浏览大量代码,如果你重新生成它,记得重新应用更改。

    或者,您可以创建自己的类并在select中处理它。例如,给定LINQ生成的类:

    class MyTable
    {      int MyNum {get; set;}
           int YourNum {get; set;}
           char OneChar {get; set;}
    }
    

    您可以轻松创建:

    class MyFixedTable
    {      int MyNum {get; set;}
           int YourNum {get; set;}
           string OneChar {get; set;}
       public MyFixedTable(MyTable t)
       {
             this,MyNum = t.MyNum;
             this.YourNum = t.YourNum;
             this.OneChar = new string(t.OneChar, 1);
       }
    }
    

    然后,不要写:

    var q = from t in db.MyTable
            select t;
    

    var q = from t in db.MyTable
            select new MyFixTable(t);
    
        2
  •  0
  •   Grant Wagner    17 年前
    var whatever =
        from x in something
        select new { yourString = Char.ToString(x.theChar); }
    
        3
  •  0
  •   Jonathan Allen    17 年前

    只需转到设计器窗口并将类型更改为string。我一直这样做,因为我发现string在我的代码中比Char更容易使用。

        4
  •  -1
  •   Glenn Slaven    17 年前

    不知道你为什么要这么做。底层数据类型不能存储多个char,通过将其表示为字符串变量,您需要在提交到db之前检查长度,就像您保持原样一样,您可以对char调用ToString()来获取字符串