Использование анонимного объекта var для получения InvalidCastException для LINQ - PullRequest
1 голос
/ 21 декабря 2011

Я получаю сообщение об ошибке при попытке перебрать объект запроса с помощью переменной var в конструкции foreach. Я загружаю XML в набор данных и выполняю набор данных в Linq по явным причинам. Пожалуйста, исправьте мою ошибку. Это мой код:

ds.ReadXml(fsReadXml);

DataTable myDataTable = ds.Tables[0];

var ordersQuery = myDataTable.AsEnumerable();

var subQuery = (from Geo03 in ordersQuery
                select new
                {
                    PARENTTYPE = Geo03.Field<String>("PARENTTYPE"),
                    PARENTINSTANCE = Geo03.Field<int>("PARENTINSTANCE"),
                    CHILDTYPE = Geo03.Field<String>("CHILDTYPE"), 
                    CHILDINSTANCE = Geo03.Field<String>("CHILDINSTANCE"),
                    CHILDPOS = Convert.ToInt32(Geo03.Field<int>("CHILDPOS"))
});
XDocument doc = null;
foreach (var cin in subQuery)
{


}

Это сгенерированная ошибка:

System.InvalidCastException: Specified cast is not valid.
   at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value)
   at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName)
   at SpectraWorkon.Program.<Main>b__0(DataRow Geo03) in c:\users\arun\documents\visual studio 2010\Projects\SpectraWorkon\SpectraWorkon\Program.cs:line 29
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at SpectraWorkon.Program.Main(String[] args) in c:\users\arun\documents\visual studio 2010\Projects\SpectraWorkon\SpectraWorkon\Program.cs:line 38

Я получаю сообщение об ошибке для строки foreach (var cin in subQuery), говоря, что она не может привести.

Ответы [ 2 ]

5 голосов
/ 21 декабря 2011

Вы звоните Field<int> на поле, которое не является int.

2 голосов
/ 21 декабря 2011

Имейте в виду, что запрос linq не будет выполнен до тех пор, пока вы его не используете (например, в цикле foreach или не вызываете .ToList ()).Так что в вашем случае исключение находится в той части, где вы строите свой запрос.InvaliCastException предполагает, что вы заполняете поле не того типа, который вы ожидаете.Поэтому я бы посоветовал вам проверить типы Field<T> в вашем запросе.

...