Указанное приведение не подходит для другой таблицы? - PullRequest
0 голосов
/ 08 декабря 2011

Ну, вот ситуация, из таблицы до того, как я запустил этот код, все работает отлично.Но когда я изменяю таблицу, получаю ошибку, а я думаю, что нет, потому что поле T_TEMPLATE_ID также является «int», как и таблица ранее.1004 * вот код:

       DataTable dt;
       dt = getDownload(); // << here dt get table

       int iTemplateId = 3;
       IEnumerable<DataRow> query;

       try
       {
            query =
                from t in dt.AsEnumerable()
                where t.Field<double>("T_TEMPLATE_ID") == iTemplateId
                select t;

            // here comes the error
            dt = query.CopyToDataTable<DataRow>();
       }
       catch (Exception exp)
       {
            MessageBox.Show("Error: " + exp.Message, "Error");

       }

так в чем проблема, я ошибаюсь в другом месте?Извините, если это не совсем понятно, вы можете запросить дополнительную информацию:)

спасибо, прежде чем

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

@Mr.Rendezvous вы можете попробовать это:

Проверьте, будет ли результат теста. Добавьте точку останова на тесте и на boundTable.

            IEnumerable<DataRow> test =
            from t in dt.AsEnumerable()
            where Convert.ToInt32(t["T_TEMPLATE_ID"]) == iTemplateId
            select t;

            if(test.count() > 0)
            {
            //recods Found!
            DataTable boundTable  = test.CopyToDataTable<DataRow>();
            }
            else
            {
              //no Recods found!
            }

Метод DataTableExtensions.CopyToDataTable (Of T) (IEnumerable (Of T)) MSDN

Привет

0 голосов
/ 08 декабря 2011

Похоже, тип вашего поля на самом деле не double, а int. Ваш запрос пытается (неявно) распаковать int как double, вызывая ошибку приведения. Измените запрос, чтобы поле читалось как int.

from t in dt.AsEnumerable()
where t.Field<int>("T_TEMPLATE_ID") == iTemplateId
select t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...