Fylle et datasett eller Datatable fra et LINQ spørreresultatsettet

stemmer
114

Hvordan du utsetter en LINQ spørring som en ASMX webtjeneste du? Vanligvis fra virksomheten tier, kan jeg returnere et maskinskrevet DataSeteller DataTablesom kan serialisert for transport over ASMX.

Hvordan kan jeg gjøre det samme for en LINQ spørringen? Er det en måte å fylle et maskinskrevet DataSeteller DataTablevia et LINQ spørringen?

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

Hvordan kan jeg få resultatet sett av et LINQ spørring i en DataSeteller DataTable? Alternativt er det LINQ spør serializeable slik at jeg kan utsette det som en ASMX web-tjeneste?

Publisert på 01/08/2008 klokken 04:59
kilden bruker
På andre språk...                            


6 svar

stemmer
78

Som nevnt i spørsmålet, IEnumerablehar en CopyToDataTablemetode:

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

Hvorfor vil ikke at arbeidet for deg?

Svarte 15/08/2008 kl. 16:27
kilden bruker

stemmer
24

For å utføre denne spørring mot en DataContextklasse, må du gjøre følgende:

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

Uten as IEnumerable<DataRow>;vil du se følgende kompileringsfeil:

Kan implisitt ikke konvertere type 'System.Collections.Generic.IEnumerable' til 'System.Collections.Generic.IEnumerable'. En eksplisitt konvertering eksisterer (du mangler en cast?)

Svarte 13/02/2009 kl. 00:10
kilden bruker

stemmer
21

Gjør et sett på dataoverføring Objects, et par kartleggere, og returnere det via .asmx.
Du bør aldri avsløre databaseobjekter direkte, som en endring i prosedyren skjema vil forplante seg til webtjenesten forbrukeren uten at du merker det.

Svarte 15/08/2008 kl. 16:42
kilden bruker

stemmer
15

Hvis du bruker en avkastning type IEnumerable, kan du returnere spørsmålet variabel direkte.

Svarte 01/08/2008 kl. 14:10
kilden bruker

stemmer
10

Lag en klasse objekt og returnere en list(T)av spørringen.

Svarte 08/08/2008 kl. 12:17
kilden bruker

stemmer
1

Hvis du bruker avkastningen type IEnumerable.Det hjelper returnere søket variabel direkte.

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>();
Svarte 11/04/2018 kl. 11:55
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more