Πλήρωση ένα σύνολο δεδομένων ή DataTable από ένα σύνολο LINQ ερώτημα αποτέλεσμα

ψήφοι
109

Πώς μπορείτε να εκθέσει ένα ερώτημα LINQ ως υπηρεσία web ASMX; Συνήθως, από την επιχείρηση βαθμίδα, μπορώ να επιστρέψει από ένα δακτυλογραφημένο DataSetή DataTableπου μπορεί να συνέχειες για τη μεταφορά άνω των ASMX.

Πώς μπορώ να κάνω το ίδιο για ένα ερώτημα LINQ; Υπάρχει τρόπος να συμπληρώσετε ένα δακτυλογραφημένο εκεί DataSetή DataTableμέσω ερώτημα 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;
}

Πώς μπορώ να πάρω το αποτέλεσμα που της ένα ερώτημα LINQ σε ένα DataSetή DataTable; Εναλλακτικά, είναι η LINQ ερώτημα serializeable έτσι ώστε να μπορώ να το εκθέσει ως μια διαδικτυακή υπηρεσία ASMX;

Δημοσιεύθηκε 01/08/2008 στις 05:59
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
76

Όπως αναφέρεται στην ερώτηση, IEnumerableέχει μια CopyToDataTableμέθοδο:

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

Γιατί δεν θα ότι η δουλειά για σας;

Απαντήθηκε 15/08/2008 στις 17:27
πηγή χρήστη

ψήφοι
24

Για να εκτελέσετε το ερώτημα κατά μια DataContextτάξη, θα πρέπει να κάνετε τα εξής:

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

Χωρίς το as IEnumerable<DataRow>;, θα δείτε το ακόλουθο μήνυμα λάθους μεταγλώττισης:

Δεν είναι δυνατή η μετατροπή σιωπηρά τύπου «System.Collections.Generic.IEnumerable» σε «System.Collections.Generic.IEnumerable». Μια ρητή μετατροπή υφίσταται (είναι αυτά που λείπουν ένα καστ;)

Απαντήθηκε 13/02/2009 στις 01:10
πηγή χρήστη

ψήφοι
21

Κάντε μια σειρά από αντικείμενα μεταφοράς δεδομένων, ένα ζευγάρι των χαρτογράφους, και να επιστρέψει ότι μέσω του .asmx.
Θα πρέπει ποτέ να εκθέσει τα αντικείμενα της βάσης δεδομένων άμεσα, όπως η αλλαγή της διαδικασίας σχήμα θα διαδοθεί στον καταναλωτή διαδικτυακή υπηρεσία, χωρίς να το αντιληφθείτε.

Απαντήθηκε 15/08/2008 στις 17:42
πηγή χρήστη

ψήφοι
15

Εάν χρησιμοποιείτε ένα είδος επιστροφής του IEnumerable, μπορείτε να επιστρέψετε το ερώτημα απευθείας μεταβλητή.

Απαντήθηκε 01/08/2008 στις 15:10
πηγή χρήστη

ψήφοι
10

Δημιουργήστε ένα αντικείμενο κλάσης και να επιστρέψει ένα list(T)του ερωτήματος.

Απαντήθηκε 08/08/2008 στις 13:17
πηγή χρήστη

ψήφοι
3

Εάν χρησιμοποιείτε ο τύπος επιστροφής του IEnumerable.it βοηθά να επιστρέψει άμεσα μεταβλητή ερώτημά σας.

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>();
Απαντήθηκε 11/04/2018 στις 11:55
πηγή χρήστη

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