1

foreach構造でvar変数を使用してクエリオブジェクトをループしようとするとエラーが発生します。明示的な理由で、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)キャストできないというエラーが発生しました 。

4

2 に答える 2

5

Field<int>ではないフィールドを呼び出していますint

于 2011-12-20T23:40:42.547 に答える
2

linq クエリは、実際に使用するまで実行されないことに注意してください (たとえば、foreach ループで使用するか、.ToList() を呼び出す)。したがって、あなたの場合、クエリを作成する部分に例外があります。はInvaliCastException、期待するタイプではないフィールドに値を入力していることを示唆しています。そのため、クエリでの型を確認することをお勧めしField<T>ます。

于 2011-12-20T23:45:43.553 に答える