在存储过程中使用Linq to SQL时,必须将char(1)列作为c#char返回吗?

在存储过程中使用Linq to SQL时,必须将char(1)列作为c#char返回吗?,c#,.net,visual-studio,linq-to-sql,C#,.net,Visual Studio,Linq To Sql,使用LINQtoSQL和存储过程时,为描述过程的结果集而生成的类使用char属性来表示SQL过程中的char(1)列。我希望这些是字符串-有没有简单的方法来实现这一点?不知道为什么要这样做。底层数据类型不能存储多个字符,通过将其表示为字符串变量,您需要在提交到db之前检查长度,如果您保持原样,您可以只调用字符上的ToString()来获取字符串,您可以修改{database}.designer.cs文件。我手头没有一个可以检查的工具,但我相信这是相当简单的——你只需要费力地阅读大量代码,如果你重

使用LINQtoSQL和存储过程时,为描述过程的结果集而生成的类使用char属性来表示SQL过程中的char(1)列。我希望这些是字符串-有没有简单的方法来实现这一点?

不知道为什么要这样做。底层数据类型不能存储多个字符,通过将其表示为字符串变量,您需要在提交到db之前检查长度,如果您保持原样,您可以只调用字符上的ToString()来获取字符串,您可以修改{database}.designer.cs文件。我手头没有一个可以检查的工具,但我相信这是相当简单的——你只需要费力地阅读大量代码,如果你重新生成代码,记得重新应用更改

var whatever =
    from x in something
    select new { yourString = Char.ToString(x.theChar); }
或者,您可以创建自己的类并在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;


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

如果您要存储的数据已经是字符串,转换是一件痛苦的事情。乔纳森的评论总结了我的感受。在EF4中,char(1)字段显示为字符串,因此MS显然意识到了这一点。
var q = from t in db.MyTable
        select new MyFixTable(t);