Linq查询返回null。无法弄清楚为什么

时间:2011-12-14 12:53:11

标签: linq

我的结果返回null。

IEnumerable<DataRow> result = ( from r in db.vedhaeftedeFilers.AsEnumerable() where r.beskedId == id select new { r.filnavn, r.filtype, r.data })as IEnumerable<DataRow>;

数据库中有数据,id正确。我猜它有 与我使用IEnumerable有关,但无法弄清问题是什么。

3 个答案:

答案 0 :(得分:4)

如果您传递的对象实际上不是nullas运算符将返回IEnumerable<DataRow>,这显然不是因为您投射到{{1的匿名类型}}

顺便说一句,select new { ... }调用会使数据库表的行为类似于哑数组,从而破坏您的性能。

你到底想做什么?

答案 1 :(得分:0)

select new { r.filnavn, r.filtype, r.data }

这会创建一个包含只读属性filnavnfiltypedata的匿名类型。因此,LINQ理解表达式(from ... select)的类型为IEnumerable<anonymous>

此类型未实现IEnumerable<DataRow>,因此Jon注释会返回null

答案 2 :(得分:0)

执行此操作时:

select new { r.filnavn, r.filtype, r.data }

...您正在返回匿名类型的集合。这是一个问题,因为您正在尝试将此集合强制转换为IEnumerable<DataRow>。因为你正在使用as进行强制转换,所以它会“无声地死亡”并返回null,因为使用as关键字进行投射时,如果强制转换失败则不会抛出InvalidCastException(而不是使用p { {1}})。

请改为尝试:

MyClass x = (MyClass)MyObj

注意我使用了var result = ( from r in db.vedhaeftedeFilers.AsEnumerable() where r.beskedId == id select new { r.filnavn, r.filtype, r.data });并且没有尝试将结果转换为类型。