[英]Invalid cast is possible in Linq2SQL query
我在使用Linq2SQL查询时遇到了麻烦。 对有问题的查询进行解剖会产生这种令人困惑的行为的最小例子。
NorthwindDataContext db =
new NorthwindDataContext();
IEnumerable<int> q =
from x in db.Categories
select (int)(object)new System.Collections.ArrayList(x.CategoryID);
int[] ouch = q.ToArray();
( CategoryID
是一个int
。)最后, ouch
将填充零(数据库中的每个类别为零)。 我在这个例子中使用了int
和ArrayList
; 确切的类型是无关紧要的。 重复这一现象所需的要点是:
select
表达式中使用查询的数据库表的属性。 如果未使用查询表的列,则将引发强制转换异常。 我的问题是,为什么上面的代码不会产生异常试图将ArrayList
转换为int
?
根据LINQPad生成的SQL代码:
SELECT NULL AS [EMPTY]
FROM [Categories] AS [t0]
作为我的问题的背景:我的原始代码读取如下:
IEnumerable<ParentClass> q =
(from x in db.SomeTable
select (ParentClass) new ChildClass { SomeProperty = x.SomeColumn })
.ToArray();
ChildClass
继承自ParentClass
。 这段代码虽然输入正确,语义合理但却引发异常。 仅当db
是Linq2SQL连接时才会发生这种情况,而不是它是本地数据源。 试图理解这种行为的原因导致我上面发布的代码。
NorthwindDataContext db = new NorthwindDataContext();
IEnumerable<int> q =
from x in db.Categories
select x.CategoryID;
int[] ouch = q.ToArray();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.