Vyplňování DataSet nebo DataTable z LINQ výsledné sady dotazu

hlasů
109

Jak se vám vystavit dotaz LINQ jako webové služby ASMX? Obvykle se z vnitřní vrstvy, mohu vrátit na stroji DataSet, nebo DataTablekteré mohou být serializován pro přenos přes ASMX.

Jak mohu udělat totéž pro LINQ dotazu? Existuje způsob, jak naplnit na stroji DataSetnebo DataTablepomocí LINQ dotazu?

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

Jak mohu získat sadu výsledků z dotazu LINQ do DataSetOr DataTable? Alternativně je LINQ dotaz serializeable takže mohu vystavit ji jako webovou službu ASMX?

Položena 01/08/2008 v 05:59
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
76

Jak je uvedeno v otázce, IEnumerableCopyToDataTablemetoda:

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

Proč se, že pracovat pro vás?

Odpovězeno 15/08/2008 v 17:27
zdroj uživatelem

hlasů
24

Chcete-li provést tento dotaz proti DataContexttřídě, budete muset provést následující kroky:

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

Bez as IEnumerable<DataRow>;uvidíte následující chybu kompilace:

Nelze implicitně převést typ ‚System.Collections.Generic.IEnumerable‘ to ‚System.Collections.Generic.IEnumerable‘. Explicitní konverze existuje (které chybí obsazení?)

Odpovězeno 13/02/2009 v 01:10
zdroj uživatelem

hlasů
21

Udělejte si sadu Přenos datových objektů, pár tvůrci map, a vrátit se, že přes asmx.
Měli byste nikdy odhalit databázové objekty přímo, jak změna v postupu schématu se bude šířit do webové služby spotřebiteli, aniž byste si toho všimli.

Odpovězeno 15/08/2008 v 17:42
zdroj uživatelem

hlasů
15

Používáte-li návratový typ IEnumerable, můžete se vrátit dotazu přímo proměnnou.

Odpovězeno 01/08/2008 v 15:10
zdroj uživatelem

hlasů
10

Vytvořte objekt třídy a vrátí list(T)dotazu.

Odpovězeno 08/08/2008 v 13:17
zdroj uživatelem

hlasů
3

Používáte-li návratový typ IEnumerable.To pomůže vrátit dotazu proměnné přímo.

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>();
Odpovězeno 11/04/2018 v 11:55
zdroj uživatelem

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