LINQ DataRowExtensions.Поле должно быть ?

#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 рад помочь. Пожалуйста, не забудьте проголосовать за ответы и вопросы, которые вы считаете полезными или хорошими (и в случае ответов на ваши собственные вопросы, отметьте правильный ответ как правильный).