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