2011-12-20 19 views
1

foreach構文でvar変数を使用してクエリオブジェクトをループする際にエラーが発生します。 xmlをデータセットにロードし、明示的な理由でLinqにデータセットを実行しています。私の間違いを訂正してください。これは私のコードです:LINQのInvalidCastExceptionを取得するvar匿名オブジェクトの使用

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)のためのエラーを取得しています。

答えて

5

intではないフィールドにField<int>と呼んでいます。

+0

+1 – TheBoyan

+0

@all、どうして私のクエリを反復することができますか?..私は迷っています:( – user1061293

2

linqクエリは実際に使用するまでは実行されません(foreachループや.ToList()など)。したがって、あなたのケースでは、例外はクエリを作成する部分にあります。 InvaliCastExceptionは、期待しているタイプではないフィールドを塗りつぶしていることを示しています。だから私はあなたのクエリのField<T>の種類を確認することをお勧めします。

+0

+1(詳しくはStacktraceは 'Field 'しかし、どのように言わない) – SLaks

関連する問題