Laden...

DataTable mit Linq füllen

Erstellt von webbenny vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.235 Views
W
webbenny Themenstarter:in
1 Beiträge seit 2010
vor 14 Jahren
DataTable mit Linq füllen

verwendetes Datenbanksystem: MS-SQL 2008

Ich will mit einer Linq Abfrage auf eine MSSQL 2008 Tabelle ein DataTable füllen.

Dazu gehe ich wie folgt vor:

            MyDataContext db = new MyDataContext();

            IEnumerable<DataRow> query = (from products in db.Products.AsEnumerable()
                                          select new
                                          {
                                              products.SNr,
                                              products.ItemNr,
                                              products.Desc
                                          }) as IEnumerable<DataRow>;

            DataTable dt = new DataTable();
            dt = query.CopyToDataTable<DataRow>();

Komischweise erhalte ich eine Null-Exception für query.
Hat jemand eine Idee, woran das liegen kann? Spalten, Tabellen usw. sind korrekt. Beim builden werden ebenfalls keine Fehler ausgegeben.

Nur zur Laufzeit kommt: "Der Wert darf nicht NULL sein. Parametername: source"

In der Zeile:

dt = query.CopyToDataTable<DataRow>();

Gruß, webbenny

I
9 Beiträge seit 2010
vor 14 Jahren

Hi,

ich vermute beim Safe Cast mit as Enumerable<DataRow> erhältst du null zurück, da du nunmal einen anonymen Typen erstellst und der nunmal keine DataRow ist. Entweder erstellst du jetzt eine DTO Klasse welche die Informationen weitertransportiert oder du machst dich schlau wie man eine query mit anonymen Typen in eine DataTable castet. 😉 Wenn du natürlich keine DataRow hast, dann kannst du auch nicht die ExtensionMethod CopyToDataTable nutzen. Also: per Hand machen! 😃

Per Hand: (in etwa...)


var query = from products in db.Products select new { 
                                              products.SNr,
                                              products.ItemNr,
                                              products.Desc};
DataTable dt = new DataTable();
//InitColumns - Wie auch immer! ;)
foreach(var product in query)
{
dt.Rows.Add(new object[]{producst.SNr, products.ItemNr, products.Desc});
}

So long...