Kitöltése DataSet vagy DataTable egy LINQ lekérdezés eredménye készlet

szavazat
109

Hogyan tegye a LINQ lekérdezés egy ASMX internetes szolgáltatás? Általában az üzleti réteg, tudok visszatérni egy gépelt DataSetvagy DataTableamely sorozatban történő szállítás ASMX.

Hogyan lehet csinálni ugyanazt a LINQ lekérdezés? Van egy módja annak, hogy feltölti egy gépelt DataSetvagy DataTablekeresztül LINQ lekérdezés?

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

Hogyan juthatok az eredmény meg a LINQ lekérdezés egy DataSetvagy DataTable? Egy másik változat szerint a LINQ lekérdezés serializeable, így én is ki, mint egy ASMX internetes szolgáltatás?

A kérdést 01/08/2008 05:59
a forrás felhasználó
Más nyelveken...                            


7 válasz

szavazat
15

Ha egy visszatérési típus IEnumerable, akkor vissza a lekérdezés változót közvetlenül.

Válaszolt 01/08/2008 15:10
a forrás felhasználó

szavazat
10

Hozzon létre egy objektumot, és visszatér a list(T)lekérdezés.

Válaszolt 08/08/2008 13:17
a forrás felhasználó

szavazat
76

Amint az a kérdés, IEnumerablevan egy CopyToDataTablemódszer:

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

Miért nem, hogy a munka az Ön számára?

Válaszolt 15/08/2008 17:27
a forrás felhasználó

szavazat
21

Hogy egy sor Adatátvitel Objects, egy pár térképészek, és visszatér, hogy keresztül .asmx.
Meg kell soha ki az adatbázis-objektumokat közvetlenül, mint a változás az eljárás séma fognak terjedni az internetes szolgáltatás fogyasztó anélkül, hogy észrevenné.

Válaszolt 15/08/2008 17:42
a forrás felhasználó

szavazat
24

Ahhoz, hogy végezze el ezt a lekérdezést egy DataContextosztály, akkor meg kell tennie a következőket:

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

Anélkül, hogy a as IEnumerable<DataRow>;látni fogja a következő fordítási hibát:

Nem lehet hallgatólagosan átalakítani típus „System.Collections.Generic.IEnumerable” -ről „System.Collections.Generic.IEnumerable”. Az explicit konverziós létezik (Ön hiányzik a leadott?)

Válaszolt 13/02/2009 01:10
a forrás felhasználó

szavazat
3

Ha a visszatérési típus IEnumerable.Ez segíti vissza a lekérdezés változót közvetlenül.

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>();
Válaszolt 11/04/2018 11:55
a forrás felhasználó

szavazat
0

A teljesség kedvéért, ezek a megoldások nem működnek EF Core (legalábbis nem az EF Core 2.2). Casting az IEnumerable<DataRow>, ahogy azt a többi választ itt, nem sikerül. Végrehajtási ezt az osztályt, és kiterjesztése módszereket dolgozott nekem https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/implement-copytodatatable-where-type-not-a-datarow .

Hogy miért nem épített EF Core, én nem ötlet.

Válaszolt 20/06/2019 23:14
a forrás felhasználó

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