2011-12-20 4 views
1

foreach 구문에서 var 변수를 사용하여 쿼리 개체를 통해 루프하는 동안 오류가 발생합니다. 나는 XML을로드하고 명시적인 이유로 Linq에 Dataset을 수행하고 있습니다. 제 실수를 바로 잡으세요. 이 캐스트 할 수없는 말,LINQ에 대해 InvalidCastException을 가져 오는 var 익명 개체 사용

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)에 대한 오류를 얻고있다 :

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) 
{ 


} 

이 생성 된 오류입니다 : 이것은 내 코드입니다.

답변

5

int이 아닌 입력란에 Field<int>을 호출하려고합니다.

+0

한 빠른 속도와 직접 : – TheBoyan

+0

@all, 그래서 어떻게 내 쿼리를 반복 할 수 있습니까? ... 나는 손실입니다 .. :( – user1061293

2

linq 쿼리는 실제로 foreach 루프에서 사용하거나 .ToList()를 호출 할 때까지 실행되지 않습니다. 그래서 귀하의 경우 예외는 귀하가 귀하의 질의를 작성하는 부분에 있습니다. InvaliCastException은 예상 한 유형이 아닌 필드를 채우고 있음을 나타냅니다. 그래서 당신의 쿼리에서 Field<T>의 유형을 확인하는 것이 좋습니다.

+0

하나를 더 깊은 설명. (스택 트레이스가 명시 적으로'이 필드를 '에서 말한다, 하지만 어떻게 말하지 않는다) – SLaks