Geoff Dalgas Geoff Dalgas - 4 days ago 7
C# Question

Filling a DataSet or DataTable from a LINQ query result set

How do you expose a LINQ query as an ASMX web service? Usually, from the business tier, I can return a typed

DataSet
or
DataTable
which can be serialized for transport over ASMX.

How can I do the same for a LINQ query? Is there a way to populate a typed
DataSet
or
DataTable
via a LINQ query?

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;
}


How can I get the result set of a LINQ query into a
DataSet
or
DataTable
? Alternatively, is the LINQ query serializeable so that I can expose it as an ASMX web service?

Answer

As mentioned in the question, IEnumerable has a CopyToDataTable method:

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>();

Why won't that work for you?

Comments