Filling a DataSet or DataTable from a LINQ query result set

后端 未结 7 712
一个人的身影
一个人的身影 2020-12-01 02:38

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 seri

相关标签:
7条回答
  • 2020-12-01 02:53

    If you use a return type of IEnumerable, you can return your query variable directly.

    0 讨论(0)
  • 2020-12-01 02:56

    Create a class object and return a list(T) of the query.

    0 讨论(0)
  • 2020-12-01 03:01

    For the sake of completeness, these solutions do not work for EF Core (at least not for EF Core 2.2). Casting to IEnumerable<DataRow>, as suggested in the other answers here, fails. Implementing this class and extension methods worked for me https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/implement-copytodatatable-where-type-not-a-datarow.

    Why it's not built into EF Core, I have not idea.

    0 讨论(0)
  • 2020-12-01 03:03

    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?

    0 讨论(0)
  • 2020-12-01 03:11

    If you use IEnumerable as the return type, it will return your query variable directly.

    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>();
    
    0 讨论(0)
  • 2020-12-01 03:13

    Make a set of Data Transfer Objects, a couple of mappers, and return that via the .asmx.
    You should never expose the database objects directly, as a change in the procedure schema will propagate to the web service consumer without you noticing it.

    0 讨论(0)
提交回复
热议问题