Datareader da LINQ Query per SqlBulkCopy

anonymous-types c# datareader linq sqlbulkcopy

Domanda

Sto usando questa libreria:

Collegamento a EntityDataReader

per mettere alcuni risultati di query di linq da un parsing xml a un database con un sqlbulkcopy che ci consente di inserire i dati direttamente senza utilizzare i datatables o tali strutture di dati.

Non sono in grado di implementarlo.

Questo è il codice che ho scritto finora senza alcun successo:

XDocument xdoc = XDocument.Parse(str_XmlToParse);

            //ORDINI

            IEnumerable<XDocument> xdod;

            var orders = from c in xdoc.Descendants("ordersdata").AsEnumerable().Descendants("order").AsEnumerable()
                         select new
                         {
                             Client_ID = (string)c.Element("Client").Element("ID"),
                             Doc_ID = (string)c.Element("ord_ID"),
                             Doc_data = (DateTime)c.Element("ord_datetime"),
                         };
      IDataReader dr = orders.AsDataReader();

            using (SqlConnection con = new SqlConnection(connectionString))
            {
                con.Open();
                using (SqlTransaction tran = con.BeginTransaction())
                {
                    var newOrders =
                            from i in Enumerable.Range(0, totalToSend)
                            select new Order
                            {
                                customer_name = "Customer " + i % 100,
                                quantity = i % 9,
                                order_id = i,
                                order_entry_date = DateTime.Now
                            };

                    SqlBulkCopy bc = new SqlBulkCopy(con,
                      SqlBulkCopyOptions.CheckConstraints |
                      SqlBulkCopyOptions.FireTriggers |
                      SqlBulkCopyOptions.KeepNulls, tran);

                    bc.BatchSize = 1000;
                    bc.DestinationTableName = "order_queue";
                    bc.WriteToServer(newOrders.AsDataReader());

                    tran.Commit();
                }
                con.Close();

che è principalmente una copia di ciò che è negli esempi di quella libreria.

Non riesco nemmeno a capire correttamente cosa sta succedendo con tutti i loro strani getti, ma ho bisogno che funzioni. (credimi ho cercato di capire)

Continuo a ricevere questo errore:

Errore 1 'System.Collections.Generic.IEnumerable AnonymousType # 1>' non contiene una definizione per 'AsDataReader' e nessun metodo di estensione 'AsDataReader' che accetta un primo argomento di tipo 'System.Collections.Generic.IEnumerable AnonymousType # 1>' potrebbe essere trovato (ti manca una direttiva using o un riferimento di assembly?)

Che cos'è? Come lo aggiusto?

Grazie

Risposta accettata

Bene, in pratica l'errore dice che non è possibile applicare il metodo "AsDataReader" con parametro un oggetto "IEnumerable" perché non esiste un tale metodo con questa definizione. Se può essere utile, provare ad aggiungere nei riferimenti la DLL "System.Data.Entity" e System.Data.EntityClient



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow