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
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...