При использовании Linq to SQL с хранимыми процедурами должны ли столбцы char(1) возвращаться как символы c #?
-
09-06-2019 - |
Вопрос
При использовании Linq to SQL и хранимых процедур класс, созданный для описания результирующего набора процедуры, использует свойства char для представления столбцов char(1) в процедуре SQL.Я бы предпочел, чтобы это были строки - есть ли какой-нибудь простой способ сделать так, чтобы это произошло?
Решение
Вы могли бы изменить файл {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);
Другие советы
var whatever =
from x in something
select new { yourString = Char.ToString(x.theChar); }
Просто перейдите в окно конструктора и измените тип на string.Я делаю это постоянно, так как нахожу, что строки в моем коде проще использовать, чем символ Char.
Не уверен, зачем вам это понадобилось.Базовый тип данных не может хранить более одного символа, представляя его как строковую переменную, вы вводите необходимость проверки длин перед передачей в БД, где, как будто вы оставляете все как есть, вы можете просто вызвать toString() для символа, чтобы получить строку