Wypełnienie DataSet lub DataTable z zestawu LINQ wynikowej zapytania

głosy
109

W jaki sposób narażać kwerendy LINQ jako usługa WWW ASMX? Zazwyczaj od warstwy biznesowej, mogę zwrócić wpisane DataSetlub DataTablektóre mogą być szeregowane dla transportu nad ASMX.

Jak mogę zrobić to samo dla kwerendy LINQ? Czy istnieje sposób, aby wypełnić wpisane DataSetlub DataTablepoprzez kwerendy 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;
}

Jak mogę uzyskać wynik zestaw kwerendy LINQ w DataSetOr DataTable? Alternatywnie jest kwerenda serializeable LINQ tak, że mogę narazić go jako usługa WWW ASMX?

Utwórz 01/08/2008 o 05:59
źródło użytkownik
W innych językach...                            


6 odpowiedzi

głosy
76

Jak wspomniano w pytaniu, IEnumerablema CopyToDataTablemetodę:

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

Dlaczego nie będzie to praca dla Ciebie?

Odpowiedział 15/08/2008 o 17:27
źródło użytkownik

głosy
24

Aby wykonać tę kwerendę przeciwko DataContextklasie, musisz wykonać następujące czynności:

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>;pojawi się następujący błąd kompilacji:

Nie można niejawnie przekonwertować typu „System.Collections.Generic.IEnumerable” do „System.Collections.Generic.IEnumerable”. Wyraźne konwersji istnieje (czy brakuje obsady?)

Odpowiedział 13/02/2009 o 01:10
źródło użytkownik

głosy
21

Zrób zestaw danych obiektów transfer, kilka mappers i powrócić że poprzez .asmx.
Należy nigdy wystawiać obiekty bazy danych bezpośrednio, jak zmiany w schemacie procedura będzie propagować konsumentowi usług internetowych bez ciebie niezauważalnie.

Odpowiedział 15/08/2008 o 17:42
źródło użytkownik

głosy
15

Jeśli używasz typ zwracanej IEnumerable, można powrócić do Twojego zapytania bezpośrednio zmienną.

Odpowiedział 01/08/2008 o 15:10
źródło użytkownik

głosy
10

Utworzyć obiekt klasy i zwracają list(T)zapytania.

Odpowiedział 08/08/2008 o 13:17
źródło użytkownik

głosy
3

Jeśli używasz typ powrót IEnumerable.it pomaga powrócić bezpośrednio zmienną zapytania.

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>();
Odpowiedział 11/04/2018 o 11:55
źródło użytkownik

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