#c# #linq
#c# #linq
Вопрос:
У меня странное поведение в некотором коде C #, который использует запрос LINQ для доступа к некоторым данным в простой таблице набора данных:
var rowConfig = from row in dsConfig.Tables[0].AsEnumerable()
where row.Field<string>("SERVICE").ToUpper().Contains(trackedServType)
select row;
seqMin = Convert.ToInt32(rowConfig.FirstOrDefault().Field<decimal>("ROYAL_MAIL_SEQ_MIN"));
Если я пишу FirstOrDefault().Field<int>
, я получаю исключение InvalidCastException во время выполнения,
По какой-то причине это должно быть decimal
.
«SERVICE» — это numeric
тип в базе данных T SQL
Комментарии:
1. Почему вы думаете, что это странно? Тип, который
T
вы передаетеField<T>()
методу, должен соответствоватьDataColumn.DataType
свойству
Ответ №1:
Numeric
Тип данных в sql server преобразуется в decimal
в .net. Вы можете увидеть полный список конверсий здесь.
Вы получаете эту ошибку, потому что в C # не существует неявного преобразования между десятичным и любым другим числовым типом. Вы можете увидеть список неявных преобразований здесь и список явных преобразований здесь.
Комментарии:
1. Отлично, это прекрасно ответило на мой вопрос, не смог найти ничего по. Поле<десятичное> в MSDN
2. @Rob рад помочь. Пожалуйста, не забудьте проголосовать за ответы и вопросы, которые вы считаете полезными или хорошими (и в случае ответов на ваши собственные вопросы, отметьте правильный ответ как правильный).