当我试图在foreach结构中使用var变量遍历query对象时遇到错误。出于明确的原因,我将xml加载到dataset中并将Dataset执行到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)行的错误,说它无法强制转换。
发布于 2011-12-21 07:40:43
您正在对不是int的字段调用Field<int>。
发布于 2011-12-21 07:45:44
请记住,在实际使用linq查询之前不会执行它(例如,在foreach循环中,或者调用.ToList())。因此,在您的情况下,例外是在构建查询的部分。InvaliCastException提示您正在填写的字段不是您期望的类型。所以我建议您在查询中检查Field<T>的类型。
https://stackoverflow.com/questions/8583386
复制相似问题