解决方案:
如果我们使用的返回类型为" IEnumerable",则可以直接返回查询变量。
创建一个类对象并返回查询的" list(T)"。
正如问题中提到的,IEnumerable具有CopyToDataTable方法:
IEnumerable<DataRow> query =
from order in orders.AsEnumerable()
where order.Field<DateTime>("OrderDate") > new DateTime(2001, 8, 1)
select order;
//Create a table from the query.
DataTable boundTable = query.CopyToDataTable<DataRow>();
要针对DataContext类执行此查询,我们需要执行以下操作:
MyDataContext db = new MyDataContext();
IEnumerable<DataRow> query =
(from order in db.Orders.AsEnumerable()
select new
{
order.Property,
order.Property2
})
as IEnumerable<DataRow>;
return query.CopyToDataTable<DataRow>();
如果没有as as IEnumerable <DataRow> ;,我们将看到以下编译错误:
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'System.Collections.Generic.IEnumerable'. An explicit conversion exists (are you missing a cast?)
如何将LINQ查询公开为ASMXWeb服务?通常,从业务层,我可以返回一个类型化的'DataSet'或'DataTable',它可以被序列化以便通过ASMX传输。
如何对LINQ查询执行相同的操作?有没有办法通过LINQ查询填充类型化的“DataSet”或“DataTable”?
public static MyDataTable CallMySproc()
{
string conn = "...";
MyDatabaseDataContext db = new MyDatabaseDataContext(conn);
MyDataTable dt = new MyDataTable();
//execute a sproc via LINQ
var query = from dr
in db.MySproc().AsEnumerable
select dr;
//copy LINQ query resultset into a DataTable -this does not work !
dt = query.CopyToDataTable();
return dt;
}
日期:2020-03-23 10:29:26 来源:oir作者:oir
