Geo*_*gas 132 c# linq web-services .net-3.5
如何将LINQ查询公开为ASMX Web服务?通常,从业务层,我可以返回一个类型DataSet或DataTable可以序列化以通过ASMX传输.
如何为LINQ查询执行相同操作?有没有办法填充打字DataSet或DataTable通过LINQ查询?
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;
}
Run Code Online (Sandbox Code Playgroud)
如何将LINQ查询的结果集转换为DataSet或DataTable?或者,LINQ查询是否可序列化,以便我可以将其作为ASMX Web服务公开?
Jon*_*way 85
如问题所述,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>();
Run Code Online (Sandbox Code Playgroud)
为什么那不适合你呢?
小智 26
要对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>();
Run Code Online (Sandbox Code Playgroud)
如果没有,as IEnumerable<DataRow>;您将看到以下编译错误:
无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.Generic.IEnumerable'.存在显式转换(您是否错过了演员?)
如果您使用IEnumerable作为返回类型,它将直接返回您的查询变量。
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>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82717 次 |
| 最近记录: |