我的结果返回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有关,但无法弄清问题是什么。
答案 0 :(得分:4)
如果您传递的对象实际上不是null
,as
运算符将返回IEnumerable<DataRow>
,这显然不是因为您投射到{{1的匿名类型}}
顺便说一句,select new { ... }
调用会使数据库表的行为类似于哑数组,从而破坏您的性能。
你到底想做什么?
答案 1 :(得分:0)
select new { r.filnavn, r.filtype, r.data }
这会创建一个包含只读属性filnavn
,filtype
和data
的匿名类型。因此,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 });
并且没有尝试将结果转换为类型。