我正在尝试运行一个linq查询,但我需要将结果作为datatable返回,因为我要使用它来存储来自同一viewstate对象中不同查询的记录。
下面的2个版本编译通过,但返回一个空集。确切的错误是"值不能为空。参数名:源"。(是的,我已经检查过有数据):
MyDatabaseDataContext db = new MyDatabaseDataContext(conn);
IEnumerable<DataRow> queryProjects =
(from DataRow p in db.STREAM_PROJECTs.AsEnumerable()
where p.Field<int>("STREAM_ID") == StreamID
select new
{
PROJECT_ID = p.Field<int>("PROJECT_ID"),
PROJECT_NAME = p.Field<string>("PROJECT_NAME")
}) as IEnumerable<DataRow>;
DataTable results = queryProjects.CopyToDataTable<DataRow>();
...
//(from p in db.STREAM_PROJECTs.AsEnumerable()
//where p.STREAM_ID == StreamID
//select new
//{
// p.PROJECT_NAME,
// p.PROJECT_ID
//}) as IEnumerable<DataRow>;
这个帖子中的例子似乎在这种情况下也无法运行。
我猜我可以按照传统方式运行sql查询命令,但是linq不应该更快吗?
as
。如果转换无效,则as
关键字将计算为null
,因此只能与引用类型和Nullable<T>
一起使用。请参见我刚刚发布的编辑,其中包含一个示例扩展方法,可以将任何IEnumerable<T>
转换为DataTable
。 - Adam Robinsonas
的新知识 :) - JumpingJezza