Vă mulțumim pentru susținere

Completarea unui DataSet sau a DataTable dintr-un set de rezultate LINQ interogare

Cum expuneți o interogare LINQ ca serviciu web ASMX? De obicei, din clasa de afaceri, pot să returnez un DataSet sau un DataTable tipizat care poate fi serializat pentru transportul prin ASMX.

Cum pot face același lucru pentru o interogare LINQ? Există o modalitate de a popula un DataSet sau DataTable introduse printr-o interogare 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;
}

Cum pot obține setul de rezultate dintr-o interogare LINQ într-un DataSet sau DataTable ? În mod alternativ, interogarea LINQ este serializabilă, astfel încât să o pot expune ca serviciu web ASMX?

0
adăugat editat

5 răspunsuri

Dacă utilizați un tip de retur IEnumerable , puteți să vă returnați direct variabila interogare .

0
adăugat

Așa cum am menționat în întrebare, IEnumerable are o metodă CopyToDataTable :

IEnumerable query =
    from order in orders.AsEnumerable()
    where order.Field("OrderDate") > new DateTime(2001, 8, 1)
    select order;

// Create a table from the query.
DataTable boundTable = query.CopyToDataTable();

De ce nu va funcționa pentru dvs.?

0
adăugat
Pentru oricine se întreabă de ce CopyToDataTable () nu funcționează pe mașina lor: Această funcție nu face parte din .NET 3.5 SP1 și nu va fi de .NET 4.0; acesta a fost limitat la numerele si nu functioneaza pentru IEnumerable - bit.ly/dL0G5
adăugat autor motto

Creați un obiect de clasă și returnați o list (T) a interogării.

0
adăugat

Faceți un set de obiecte de transfer de date, câțiva cartografi, și returnați-l prin .asmx Ar trebui niciodată să nu expuneți direct obiectele bazei de date, deoarece o schimbare în schema de procedură se va propaga către consumatorul de servicii web fără să o observați.

0
adăugat

Dacă utilizați tipul de returnare IEnumerable . Ajută la returnarea directă a variabilei de interogare.

MyDataContext db = new MyDataContext();
IEnumerable query = 
    (from order in db.Orders.AsEnumerable()
        select new
        {
            order.Property,
            order.Property2
        })
    as IEnumerable;
return query.CopyToDataTable();
0
adăugat