首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用变量匿名对象获取LINQ的InvalidCastException

使用变量匿名对象获取LINQ的InvalidCastException
EN

Stack Overflow用户
提问于 2011-12-21 07:38:04
回答 2查看 2K关注 0票数 1

当我试图在foreach结构中使用var变量遍历query对象时遇到错误。出于明确的原因,我将xml加载到dataset中并将Dataset执行到Linq中。请纠正我的错误。这是我的代码:

代码语言:javascript
复制
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)
{


}

这是生成的错误:

代码语言:javascript
复制
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)行的错误,说它无法强制转换。

EN

回答 2

Stack Overflow用户

发布于 2011-12-21 07:40:43

您正在对不是int的字段调用Field<int>

票数 5
EN

Stack Overflow用户

发布于 2011-12-21 07:45:44

请记住,在实际使用linq查询之前不会执行它(例如,在foreach循环中,或者调用.ToList())。因此,在您的情况下,例外是在构建查询的部分。InvaliCastException提示您正在填写的字段不是您期望的类型。所以我建议您在查询中检查Field<T>的类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8583386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档